[英]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>
但是对于序列化/反序列化,您必须具有String
或Object
类型的键。
工作示例(假设您从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.