【问题标题】:Type is not supported for deserialization of an array数组的反序列化不支持类型
【发布时间】:2014-10-28 12:51:15
【问题描述】:

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

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

这是给我错误的代码:

Type is not supported for deserialization of an array.

这就是我的 JSON 的样子:

[
 {
  "Number": 123,
  "Name": "ABC",
  "ID": 123,
  "Address": "ABC"
 }
]

【问题讨论】:

    标签: c# arrays json


    【解决方案1】:

    您只需要将其反序列化为某种集合 - 例如数组。毕竟,您的 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
        }
    }
    

    【讨论】:

    • 当我尝试您的代码时,&lt;Person[]&gt; 出现错误。错误文本是:No parameterless constructor defined for type of 'Project.Models.Receipt[]'。我该怎么办 。 @jonSkeet
    【解决方案2】:

    JSON 是一个列表。 JSON 中的方括号表示对象的数组或列表。所以你需要告诉它返回一个对象列表:

    JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
    var profiles = jsonSerializer.Deserialize<List<Profiles>>(fileContents);
    

    【讨论】:

    • 我试过这样做,但我收到一条错误消息,提示“System.Collections.Generic.List”是一个“类型”,但用作“变量”
    • @user3478897 我假设 Profiles 是您定义的类。
    • 抱歉没有详细说明。
    猜你喜欢
    • 2019-10-07
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多