我有一堂课
public class Order { public int Id { get; set; } public string ShippingMethod { get; set; } }
我想将下面的JSON数据反序列化到上面的类/对象中
string json = @"{ 'Id': 1, 'ShippingMethod': { 'Code': 'external_DHLExpressWorldwide', 'Description': 'DHL ILS Express Worldwide' } }";
我的想法是ShippingMethod在JSON中是一个对象,但我只想获取ShippingMethod.Code(在JSON中)在反序列化期间将ShippingMethod像string在Order类中那样传递。
ShippingMethod
ShippingMethod.Code
string
Order
如何使用Json.NET实现该目标?
我相信我可以使用CustomJsonConverter完成它。但是我很困惑。docs中的示例仅用于WriteJson,但不适用ReadJson。
WriteJson
ReadJson
我只是使用JsonConverter上面在问题中提到的方法解决了我的问题。在我完整的代码下面:
JsonConverter
public class Order { public int Id { get; set; } [JsonConverter(typeof(ShippingMethodConverter))] public string ShippingMethod { get; set; } } public class ShippingMethodConverter : JsonConverter { public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { throw new NotImplementedException("Not implemented yet"); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.Null) { return string.Empty; } else if (reader.TokenType == JsonToken.String) { return serializer.Deserialize(reader, objectType); } else { JObject obj = JObject.Load(reader); if (obj["Code"] != null) return obj["Code"].ToString(); else return serializer.Deserialize(reader, objectType); } } public override bool CanWrite { get { return false; } } public override bool CanConvert(Type objectType) { return false; } }