使用newtonsoft反序列化json数组

时间:2015-12-11 11:02:34

标签: c# .net json json.net

如何用newtonsoft反序列化json数组?

这是我的json文件:

{
    "one": [
      {
        "one":"1",
        "two":"2", 
        "three":"3"
      },
      {
        "one":"1",
        "two":"2", 
        "three":"3"
      }
    ],
    "two": [
      {
        "one":"1",
        "two":"2", 
        "three":"3"
      }
    ]
}

这是我的代码:

myList= JsonConvert.DeserializeObject <List<MyClass>>(jsonFile);

public class MyClass
{
    public string one{ get; set; }
    public string two { get; set; }
    public string three { get; set; }
}

也许我需要以某种方式改变我的json文件?

5 个答案:

答案 0 :(得分:1)

您的课程需要与您的JSON结构相匹配。它应该是这样的:

public class Foo
{
    [JsonProperty("one")]
    public string One { get; set; }
    [JsonProperty("two")]
    public string Two { get; set; }
    [JsonProperty("three")]
    public string Three { get; set; }
}

public class RootObject
{
    [JsonProperty("one")]
    public List<Foo> One { get; set; }
    [JsonProperty("two")]
    public List<Foo> Two { get; set; }
}

现在它将正确反序列化:

Console.WriteLine(JsonConvert.DeserializeObject<RootObject>(json));

答案 1 :(得分:0)

这不是JSON数组,它是一个具有两个数组属性的对象。

使用http://json2csharp.com

public class YourClass
{
    public string one { get; set; }
    public string two { get; set; }
    public string three { get; set; }
}

public class RootObject
{
    public List<YourClass> one { get; set; }
    public List<YourClass> two { get; set; }
}

(不,我们仍然对此有一个规范性问题?每天都一样......)

答案 2 :(得分:0)

如果你想保留你的类结构,你必须将你的json文件更改为:

[
   {
      "one":"1",
      "two":"2",
      "three":"3"
   },
   {
      "one":"1",
      "two":"2",
      "three":"3"
   }
]

使用此json文件样式进行反序列化

myList= JsonConvert.DeserializeObject <List<MyClass>>(jsonFile);

将正确完成。

上面的json文件中有两个数组。因此,反序列化将失败。

答案 3 :(得分:0)

试试这个:

`public class Foo
{
    [JsonProperty("one")]
    public string One { get; set; }
    [JsonProperty("two")]
    public string Two { get; set; }
    [JsonProperty("three")]
    public string Three { get; set; }
}
public class RootObject
{
    [JsonProperty("one")]
    public List<Foo> One { get; set; }
    [JsonProperty("two")]
    public List<Foo> Two { get; set; }
}`

并反序列化对象使用

` RootObject _rootObject = JsonConvert.DeserializeObject<RootObject>
  (jObject.ToString());`

答案 4 :(得分:0)

您应该将其反序列化为Dictionary<string, MyClass[]>

var test = "{ \"one\": [ { \"one\":\"1\", \"two\":\"2\", \"three\":\"3\" }, { \"one\":\"1\", \"two\":\"2\", \"three\":\"3\" } ], \"two\": [ { \"one\":\"1\", \"two\":\"2\", \"three\":\"3\" } ] }";
var testar = JsonConvert.DeserializeObject <Dictionary<string, MyClass[]>>(test);

如果有更多的键添加,如Forth,Fifth等,这将开箱即用。

enter image description here