2013-04-04 81 views
2

我想将以下JSON表示反序列化为强类型对象。我能够从c# - > json序列化它,但反之亦然。为什么不能servicestack将此JSON反序列化为C#?

C#

public class Package 
{ 
    public Guid Id {get;set;} 
    public List<string> Email {get;set;} 
    public List<Items> Items {get;set;} 
} 

public class Items 
{ 
    public string Uri {get;set;} 
    public int Width {get;set;} 
    public int Height {get;set;} 
} 

JSON

{ 
    "Id":"84fd8751-6107-41af-9473-65aae51e042a", 
    "Email":[ 
    "[email protected]" 
    ], 
    "Items":"[ 
     {"Uri":"http://localhost/foo.jpg","Width":234,"Height":313}, 
     {"Uri":"http://localhost/bar.jpg","Width":234,"Height":174}]" 
} 

代码反序列化

var instance = JsonSerializer.DeserializeFromString<Package>(jsonData); 

目的instance被创建,并且有在instance.Items 2个对象,但所有它们的性质是空值。

TIA

+0

这是我脑死了 - JSON项目的价值是由JSON.stringify(项目)在JavaScript中设置 - 我盯着C#这么久... – Jason 2013-04-04 19:58:40

回答

6

你周围的物品价值的报价,从而把它们解析为一个字符串,而不是一个数组/列表。取消他们赢。

"Items":[ 
     {"Uri":"http://localhost/foo.jpg","Width":234,"Height":313}, 
     {"Uri":"http://localhost/bar.jpg","Width":234,"Height":174}] 
3

这是无效的JSON。项目的值周围的引号不应该在那里。

+0

这是有效的JSON,他只是反序列化它到一个不匹配的对象。 – 2013-04-04 19:57:04

+2

@Brad它实际上是无效的JSON。在JSONlint或类似的地方运行它。字符串值将在第二个'''后结束,因此以'Uri ...'开始,该字符串无效。 – 2013-04-04 22:31:11