繁体   English   中英

反序列化json-类型错误

[英]Deserializing json - wrong type

这是我尝试反序列化json的方法:

new JavaScriptSerializer().Deserialize<Dictionary<int, MyModel>>(myData);

这是课程:

public class MyModel
{
    public Dictionary<int, ItemModel> Translation { get; set; }

    public int Id { get; set; }
}

public class ItemModel
{
    public string Name { get; set; }

    public string ShortDescription { get; set; }

    public string LongDescription { get; set; }
}

这是json:

"[[],[],{"Translation":{"1":{"Name":"Bla1","ShortDescription":"bla1","LongDescription":"bla1"},"2":{"Name":"BlaUS1","ShortDescription":"BlaUS1","LongDescription":"BlaUS1"}},"Id":"12"},{"Translation":{"1":{"Name":"Bla22","ShortDescription":"bla22","LongDescription":"bla22"},"2":{"Name":"Bla2US2","ShortDescription":"Bla2US2","LongDescription":"Bla2US2"}},"Id":"13"}]"

我得到一个错误,该类型不支持数组反序列化。

我的错误在哪里?

首先,您的JSON在我看来有点不对。 它是由4个元素组成的数组,而第一个2个元素是空数组,而另外两个对象是? 我怀疑您的JSON应该是这样的:

“[{” 翻译 “:{” 1 “:{” 名称 “:” BLA1" , “SHORTDESCRIPTION”: “BLA1”, “LongDescription”: “BLA1”}, “2”:{ “名称”: “BlaUS1” “SHORTDESCRIPTION”: “BlaUS1”, “LongDescription”: “BlaUS1”}}, “ID”: “12”},{ “翻译”:{ “1”:{ “名称”: “Bla22”, “SHORTDESCRIPTION” : “bla22”, “LongDescription”: “bla22”}, “2”:{ “名称”: “Bla2US2”, “SHORTDESCRIPTION”: “Bla2US2”, “LongDescription”: “Bla2US2”}}, “ID”:” 13 “}]”

另一个问题是您具有Dictionary<int, ItemModel>但是对于序列化/反序列化,您必须具有StringObject类型的键。

工作示例(假设您从Dictionary<int, ItemModel>更改为Dictionary<object, ItemModel>)

string input = "[{\"Translation\":{\"1\":{\"Name\":\"Bla1\",\"ShortDescription\":\"bla1\",\"LongDescription\":\"bla1\"},\"2\":{\"Name\":\"BlaUS1\",\"ShortDescription\":\"BlaUS1\",\"LongDescription\":\"BlaUS1\"}},\"Id\":\"12\"},{\"Translation\":{\"1\":{\"Name\":\"Bla22\",\"ShortDescription\":\"bla22\",\"LongDescription\":\"bla22\"},\"2\":{\"Name\":\"Bla2US2\",\"ShortDescription\":\"Bla2US2\",\"LongDescription\":\"Bla2US2\"}},\"Id\":\"13\"}]";

List<MyModel> myModels = new JavaScriptSerializer().Deserialize<List<MyModel>>(input);

您的字符串表明您拥有的是JSON数组,例如:-[1,2,3]

但是您正在尝试将其反序列化为字典,该字典的json表示类似于

{"1":"Hai","2":"Hello"}

显然,库抛出错误。 可能就是为什么不使用以下命令反序列化字符串。

new JavaScriptSerializer().Deserialize<List<MyModel>[]>(myData)

但是,要使用它,您在json中不能有空数组,您必须使用属性的默认值填充它们。

为了证明上述方法有效,请尝试

"[{"Translation":{"1":{"Name":"Bla1","ShortDescription":"bla1","LongDescription":"bla1"},"2":  {"Name":"BlaUS1","ShortDescription":"BlaUS1","LongDescription":"BlaUS1"}},"Id":"12"},{"Translation":{"1":{"Name":"Bla22","ShortDescription":"bla22","LongDescription":"bla22"},"2":{"Name":"Bla2US2","ShortDescription":"Bla2US2","LongDescription":"Bla2US2"}},"Id":"13"}]"

new JavaScriptSerializer().Deserialize<List<MyModel>>(myData)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM