为什么我应该选择List<>;而不是JSON反序列化中的数组

本文关键字:反序列化 JSON 数组 选择 我应该 List lt 为什么 gt | 更新日期: 2023-09-27 18:24:05

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

现在让我们来谈谈

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

实际上问题是如果我使用

List<oodleListings> listings;

而不是

oodleListings[] listings;

它很好用!!我可以很容易地反序列化json字符串。

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

使用List而不是array的实际原因是什么

为什么我应该选择List<>;而不是JSON反序列化中的数组

您的问题与ArrayLists无关。参见下面的示例类

public class TestClassList
{
    public List<User> users;
}
public class TestClassArray
{
    public User[] users;
}
public class User
{
    public string user;
}

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

var obj1= ser.Deserialize<TestClassList>(json1);
var obj2 = ser.Deserialize<TestClassArray>(json1);

两个反序列化都可以。。

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

var obj3 = ser.Deserialize<TestClassList>(json2);
var obj4 = ser.Deserialize<TestClassArray>(json2);   //<--ERROR  

您将在第二行中得到错误(Althoug第一行没有给出错误,也没有返回有效对象)。

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

List<T>没有固定的长度,因此您可以在不知道其大小的情况下向该对象添加项目。List无疑是一个更灵活/功能性更强的类,但它的副作用是占用了更大的内存。

此外,类型为List<oodleListing>的对象将具有方法AddRange方法,该方法采用参数oodleListing[],因此您可以始终反序列化,然后添加到泛型类中。

ArrayList没有任何问题。我刚刚尝试了您的代码,它对ArrayList都没有任何问题。

在您之前的问题中,您没有给出JSON序列化字符串,否则它会在那里自行解决。你可以从ASP.Net.

查看这篇文章