为什么我应该在JSON反序列化中使用List <>而不是数组?

Chi*_*tan 6 c# arrays json list deserialization

首先让我告诉你一件事,我发布这个问题只是为了渴望和增加我的知识.希望你能清除我的疑惑!

现在让我们来谈谈

我从之前的问题答案中得到了这个问题

实际上问题是如果我使用

List<oodleListings> listings;
Run Code Online (Sandbox Code Playgroud)

代替

oodleListings[] listings;
Run Code Online (Sandbox Code Playgroud)

它工作正常!! 我可以轻松地反序列化我的json字符串.

现在的问题是为什么在反序列化json时不支持数组?

使用的实际原因Listarray什么?

L.B*_*L.B 6

您的问题与Arrays 或Lists. 请参阅下面的示例类

public class TestClassList
{
    public List<User> users;
}

public class TestClassArray
{
    public User[] users;
}

public class User
{
    public string user;
}
Run Code Online (Sandbox Code Playgroud)

并假设您的输入字符串是 string json1 = "{ users:[{user:'11'},{user:'22'}] }";

var obj1= ser.Deserialize<TestClassList>(json1);
var obj2 = ser.Deserialize<TestClassArray>(json1);
Run Code Online (Sandbox Code Playgroud)

两种反序列化都可以工作..

但是如果你尝试反序列化这个字符串 string json2 = "{ users:{user:'11'} }";

var obj3 = ser.Deserialize<TestClassList>(json2);
var obj4 = ser.Deserialize<TestClassArray>(json2);   //<--ERROR  
Run Code Online (Sandbox Code Playgroud)

你会在第二行得到错误(尽管第一行没有给出错误,它也没有返回一个有效的对象)。

结果:第二个 json 字符串不包含用户数组,这就是为什么你得到No parameterless constructor defined for type of 'User[]'.