2014-11-03 153 views
1

以下是我嘗試反序列化的json:反序列化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"}]" 

和我該類型不支持數組反序列化的錯誤。

我的錯誤在哪裏?

+0

您似乎是陣列,其中前兩個元素都是0的長度的陣列和第三和第四元件是爲MyModel的 - 它可能無法反序列化,因爲它不能將空數組變成MyModel,將前兩個元素設置爲'null'而不是'[]' – 2014-11-03 10:59:06

回答

1

首先你JSON的看起來有點錯誤的我。它是和4個元素的數組,前兩個元素是空數組,而另外兩個對象?我懷疑你的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); 
0

你的字符串暗示你所擁有的是一個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) 
+0

這裏不起作用 – 2014-11-03 10:13:50

+0

@csprabala我試着用List []和它給我一個大小爲2的列表,但空對象列表不起作用,它會拋出一個異常 – 2014-11-03 10:15:04

+0

@PatrickHofman是正確的這贏得了'工作。看看這個。 http:// stackoverflow。com/questions/16015257/why-does-c-sharp-javascriptserializer-serialize-return-empty-square-brackets – csprabala 2014-11-03 10:39:25