ServiceStack Json无法完全反序列化

时间:2015-11-10 04:30:28

标签: c# servicestack

我有一个RequestDto,让我们说A类Dto,它包含一个自定义的类型属性:

// C# code
public Class MyObject
{
    public string A { get; set; }
    public string B { get; set; }
}
public Class ADto
{
    public List<MyObject> MO { get; set;}
}

当我尝试使用Json发送Dto时,Json对象看起来像这样:

{"MO":[{"A":"String","B":"a"},{"A":"String","B":"b"}]}

但我收到的对象将为null。 但是,如果我将Json字符串更改为:

{MO:[{A:"String",B:"a"},{A:"String",B:"b"}]}

我在对象上丢失了引号&#39;名字和它的工作原理。 Json的正确格式应该包括那些引号吗? 为什么会这样?

2 个答案:

答案 0 :(得分:0)

将班级更改为

public Class MyObject
{
    public string Mobile { get; set; }
    public string Name { get; set; }
}
public Class ADto
{
    public List<MyObject> MO { get; set;}
}

然后你的json应该是

{MO:[{Mobile:"0556604",Name:"Peter"},{Mobile:"4565466",Name:"John"}]}

答案 1 :(得分:0)

ServiceStack会对需要every property name to be quoted的有效JSON进行序列化和反序列化,但您可以说下面的文字有效:

{MO:[{A:"String",B:"a"},{A:"String",B:"b"}]}

然而,这不是有效的JSON,而是看起来像ServiceStack's JSV Format

您还没有提到您在哪里发送JSV格式或提供了原始HTTP请求(供我们使用),但我假设您正在使用邮差(在您的评论中提到)比您尝试在?QueryString中发送JSON而不允许。

但ServiceStack确实支持发送complex object graphs on the QueryString using JSV

由于您要发送复杂类型,因此 POST 请求 JSON www-form-urlencoded 表单数据或者如果要在QueryString中传递它,则需要将其转换为JSV。

将来请包含原始HTTP请求,因为此问题缺少关于您更改JSON字符串的位置,您尝试使用它的方式或实际发送的内容的任何上下文,其中你发送给它等等 - 让人无法猜出是什么问题。