【问题标题】:How to map json and skip parent property?如何映射json并跳过父属性?
【发布时间】:2017-03-29 22:13:20
【问题描述】:

我有这个 json 字符串,它包含两个元素,每个元素都有一个数字和一个状态:

var jsonString = "{\"Errors\":[{\"Number\":9,\"Status\":\"BadRequest\"}, {\"Number\":3,\"Status\":\"BadConnection\"}]}";

如您所见,它有一个名为 Errors 的父属性。

我已经准备了这个模型:

public class ExceptionStructure
{
    public int Number { get; set; }
    public string Status { get; set; }
}

使用 NewtonSoft.Json 我想将 json 字符串反序列化为 ExceptionStructure 对象数组,而不必为父属性创建模型(因为我真的不需要它) .

我可以这样做吗(可能在模型类上有一些 json 属性)?

我希望做这样的事情来反序列化:

var exceptionArr = JsonConvert.DeserializeObject<ExceptionStructure>(jsonString);

【问题讨论】:

  • 如果只有这个[{\"Number\":9,\"Status\":\"BadRequest\"}, {\"Number\":3,\"Status\":\"BadConnection\"}] 是你的json,你可以做JsonConvert.DeserializeObject&lt;ExceptionStructure[]&gt;(jsonString); 否则你必须创建另一个类来显式解析它

标签: c# .net json json.net


【解决方案1】:

JSON.NET 允许您反序列化 json 文件的一部分。为此,您可以先将 json 字符串反序列化为 JObject,提取相关部分,然后将它们反序列化为您的实际对象。

JObject errors = JObject.Parse(jsonString);

IList<JToken> results = errors["Errors"].Children().ToList();

IList<ExceptionStructure> exceptions = new List<ExceptionStructure>();

foreach (JToken result in results)
{
    ExceptionStructure exception= result.ToObject<ExceptionStructure>();
    exceptions.Add(exception);
}

老实说,在您的情况下,构建一个 Errors 父类可能更容易

更多信息请访问http://www.newtonsoft.com/json/help/html/SerializingJSONFragments.htm

【讨论】:

    【解决方案2】:

    这可能对你有帮助。

        string s = "{\"Errors\":[{\"Number\":9,\"Status\":\"BadRequest\"}, {\"Number\":3,\"Status\":\"BadConnection\"}]}";
        var jobj = JObject.Parse(s);
        List<ExceptionStructure> list = jobj["Errors"].ToObject<List<ExceptionStructure>>();
    

    或者:

        string s = "{\"Errors\":[{\"Number\":9,\"Status\":\"BadRequest\"}, {\"Number\":3,\"Status\":\"BadConnection\"}]}";
        List<ExceptionStructure> list = JObject.Parse(s)
            .SelectToken("Errors")
            .ToObject<List<ExceptionStructure>>();
    

    【讨论】:

      猜你喜欢
      • 2018-02-16
      • 1970-01-01
      • 1970-01-01
      • 2021-01-18
      • 2018-01-04
      • 1970-01-01
      • 2021-09-15
      • 2017-09-25
      • 1970-01-01
      相关资源
      最近更新 更多