使用 Newtonsoft 将数组中每个模型的完整 JSON 反序列化为单个 属性
Deserialize full JSON to single property for each model in an array using Newtonsoft
当反序列化一组对象时(例如 JsonConvert.DeserializeObject<Model[]>
),有没有办法在一个额外的 属性 中获得模型的完整 JSON?
例如,如果我的 JSON 是:
[{"a":1,"b":2},{"a":3,"b":4}]
我的模型 class 是:
class Model
{
public string A { get; set; }
public string B { get; set; }
public string FullJson { get; set; }
}
反序列化后,FullJson
将包含数组中第一个模型的 {"a":1,"b":2}
和第二个模型的 {"a":3,"b":4}
。有办法吗?
为此,您需要为您的 Model
class 定制 JsonConverter
,如下所示:
class ModelConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(Model);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JObject jo = JObject.Load(reader);
Model model = new Model();
serializer.Populate(jo.CreateReader(), model);
model.FullJson = jo.ToString(Formatting.None);
return model;
}
public override bool CanWrite => false;
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
然后,将 [JsonConverter]
属性添加到您的 Model
class,您应该可以开始了:
[JsonConverter(typeof(ModelConverter))]
class Model
{
...
}
这是一个工作演示:https://dotnetfiddle.net/hD5WqJ
当反序列化一组对象时(例如 JsonConvert.DeserializeObject<Model[]>
),有没有办法在一个额外的 属性 中获得模型的完整 JSON?
例如,如果我的 JSON 是:
[{"a":1,"b":2},{"a":3,"b":4}]
我的模型 class 是:
class Model
{
public string A { get; set; }
public string B { get; set; }
public string FullJson { get; set; }
}
反序列化后,FullJson
将包含数组中第一个模型的 {"a":1,"b":2}
和第二个模型的 {"a":3,"b":4}
。有办法吗?
为此,您需要为您的 Model
class 定制 JsonConverter
,如下所示:
class ModelConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(Model);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JObject jo = JObject.Load(reader);
Model model = new Model();
serializer.Populate(jo.CreateReader(), model);
model.FullJson = jo.ToString(Formatting.None);
return model;
}
public override bool CanWrite => false;
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
然后,将 [JsonConverter]
属性添加到您的 Model
class,您应该可以开始了:
[JsonConverter(typeof(ModelConverter))]
class Model
{
...
}
这是一个工作演示:https://dotnetfiddle.net/hD5WqJ