将JSON中的数组反序列化为类/对象

时间:2017-01-25 10:37:49

标签: c# json

我试图将JSON数据存储到一个类中。在我遇到数组之前,我可以通过:JSON将我的其他var ser = JsonConvert.DeserializeObject<ClsResult>(myJSON);字符串反序列化为类。

    {
      \"Test\": [{
         \"FirstBool\":1, 
         \"aString\":\"hello\"
      }]
    }

这是我JSON的课程:

public class Test
{
    [JsonProperty("FirstBool")]
    public bool FirstBool { get; set; }

    [JsonProperty("aString")]
    public string aString { get; set; }
}      

public class ResultObject
{
        [JsonProperty("Test")]
        public List<Test> Test { get; set; }
}

如何反序列化非数组JSON

var ser = JsonConvert.DeserializeObject<ResultObject>(myJSON);

我需要做些哪些更改才能让它再次发挥作用?

2 个答案:

答案 0 :(得分:1)

编辑回答

我以后发现的json字符串包含名为Test的对象,它基本上是object s(object[])的数组。

正如你从json字符串中看到的那样:

  

{       &#34;测试&#34;:[{           &#34; FirstBool&#34; :1,           &#34; ASTRING&#34; :&#34;你好&#34;       }]    }

[表示json对象以数组类型开头,]表示json对象以数组类型结束。

{表示json对象开始一个对象类型,}表示json对象结束了一个对象类型。

在您的情况下,需要使用Newtonsoft.Json库中的现有方法来创建自定义反序列化器。

Test对象的示例可以是:

JObject obj = JObject.Parse(jsonString);
// now your obj contains field named "Test" that is of type object[]
// to retrieve informations you have to select "Test" token
JToken testToken = obj.SelectToken("Test");
// your token contains now something like " [{ "FirstBool" : 1, "aString" : "hello" }]"
// which basically is an array
// meaning that you have to iterate through this
foreach(var child in token.Children())
{
    // and convert it to a Test object
    Test test = JsonConvert.DeserializeObject<Test>(child.ToString());
    // test now is fully deserialized object
}

答案 1 :(得分:0)

将其反序列化为列表:

JsonConvert.DeserializeObject<List<Test>>(json);

...而不是包装器对象。