JavaScriptSerializer 不会将 Json 字符串转换为对象? [关闭]

Posted

技术标签:

【中文标题】JavaScriptSerializer 不会将 Json 字符串转换为对象? [关闭]【英文标题】:JavaScriptSerializer does not convert Json string to object? [closed] 【发布时间】:2020-03-30 21:52:35 【问题描述】:

下面的代码没有返回任何错误,但仍然没有将 JSON 转换为对象

我从 API 获得的 JSON 字符串


    "genres": [
        
            "id": 28,
            "name": "Action"
        ,
        
            "id": 12,
            "name": "Adventure"
        
    ]

一般测试类

    public class Test
    
        public int id;
        public string Name;
    

下面的代码显示了我如何尝试将 JSON 字符串转换为测试类列表

            string JsontStr = GenreService.get();
            var Serializer = new javascriptSerializer();
            List<Test> a = (List<Test>)Serializer.Deserialize(JsontStr, typeof(List<Test>));

an image of what the object a has in it when the program has finished running

【问题讨论】:

使用How to auto-generate a C# class file from a JSON string 生成正确的数据模型。您需要一个根对象public class Welcome public List&lt;Genre&gt; Genres get; set; ,如app.quicktype.io?share=YdFGzyTvueCwJfGBb3Op 所示,这是链接问题的答案中提到的工具之一。 【参考方案1】:

序列化程序不工作,因为 json 不是 Test 对象的数组。它实际上是一个流派元素数组。在您的测试类中,名称必须小写才能匹配 json 字符串中的大小写。

public class Test

    public int id get;set;
    public string name get;set;  // it should be all lowercase as well. Case matters


public class Genres 

    public List<Test> genres get;set;


string JsontStr = GenreService.get();
var Serializer = new JavaScriptSerializer();
Genres a = (Genres)Serializer.Deserialize(JsontStr, typeof(Genres));

【讨论】:

【参考方案2】:

我用 WebMethod 对你的情况做了一个小测试,@Jawad 的答案是正确的。

测试对象列表的答案是Genres,这是我从我做的测试中得到的

genres: [id: 28, name: "Action", id: 12, name: "Adventure"]

因此,我只需要像这样声明一个 WebMethod

[WebMethod]
public static int JSONApi(List<Test> genres)

并且序列化是自动完成的

希望它有助于澄清你的情况。

【讨论】:

以上是关于JavaScriptSerializer 不会将 Json 字符串转换为对象? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用 LINQ/JavaScriptSerializer 创建 JSON 对象而不是数组

JavaScriptSerializer UTC DateTime 问题

JavaScriptSerializer 反序列化不同类型的 Json 数组

JavaScriptSerializer类 对象序列化为JSON,JSON反序列化为对象

DataContractJsonSerializer 和 JavaScriptSerializer 有啥区别?

JavaScriptSerializer 可以排除具有空值/默认值的属性吗?