首页 > 解决方案 > 一次性嵌套 JSON 属性

问题描述

我正在与一个 API 交互,该 API 的请求包含此代码段:

     "occurrence":{  
        "type":"XYZ"
     }

不是用成员创建Occurence对象Type,而是有一些可以序列化的 Newtonsoft JSON 魔法

  public string Occurence = "XYZ"

成上面的格式?

标签: c#jsonjson.net

解决方案


您可以使用自定义JsonConverter从本质上将发生属性的 JSON 表示扁平化为类型。

class SomeModel
{
  [JsonConverter(typeof(OccuranceConverter))]
  public string Occurence { get; set; }
}

class OccuranceConverter : JsonConverter<string>
{
  public override string ReadJson(JsonReader reader, Type objectType, string existingValue, bool hasExistingValue, JsonSerializer serializer)
  {
    var json = JObject.Load(reader);
    return json.GetValue("type").Value<string>();
  }

  public override void WriteJson(JsonWriter writer, string value, JsonSerializer serializer)
  {
    var json = new JObject { ["type"] = value };
    json.WriteTo(writer);
  }
}

推荐阅读