使用 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