如何映射json并跳过父属性?

时间:2017-03-29 13:06:35

标签: c# .net json json.net

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

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

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

我准备了这个模型:

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

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

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

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

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

2 个答案:

答案 0 :(得分: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

找到更多信息

答案 1 :(得分:1)

这可能会对您有所帮助。

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

OR:

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