类型不支持反序列化数组。

6

我正在尝试反序列化一个数组,但是一直遇到错误。

JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
Profiles thingy = jsonSerializer.Deserialize<Profiles>(fileContents);

这是导致错误的代码:

无法将类型反序列化为数组。

这是我的JSON样式:

[
 {
  "Number": 123,
  "Name": "ABC",
  "ID": 123,
  "Address": "ABC"
 }
]
2个回答

11

你只需要将它反序列化为某种集合 - 例如数组。毕竟,你的JSON 代表一个数组,而不是单个项。以下是简短但完整的示例:

using System;
using System.IO;
using System.Web.Script.Serialization;

public class Person
{
    public string Name { get; set; }
    public string ID { get; set; }
    public string Address { get; set; }
    public int Number { get; set; }
}

class Test
{
    static void Main()
    {
        var serializer = new JavaScriptSerializer();
        var json = File.ReadAllText("test.json");
        var people = serializer.Deserialize<Person[]>(json);
        Console.WriteLine(people[0].Name); // ABC
    }
}

当我尝试运行你的代码时,出现了一个错误,错误信息是:No parameterless constructor defined for type of 'Project.Models.Receipt[]'。这是怎么回事?@jonSkeet,请问该怎么解决? - Iman Estiri

6
JSON是一个列表。JSON中的方括号表示对象的数组或列表。因此,您需要告诉它返回对象的列表:
JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
var profiles = jsonSerializer.Deserialize<List<Profiles>>(fileContents);

我尝试过这样做,但是出现了一个错误,指出'System.Collections.Generic.List<ProjectName.Progaram.Profiles>'是一个'type',但被用作'variable'。 - user3478897
@user3478897 我假设Profiles是你定义的一个类。 - Donal
1
抱歉缺乏细节。 - user3478897

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接