2013-02-11 61 views
6

我试图使用​​库与非类似C#的属性名称约定反序列化JSON数据,如以下具体蛇的情况下配置ServiceStack.Text JsonSerializer属性名称:如何反序列化时

{ 
    "first_name": "Foo", 
    "last_name": "Bar" 
} 

我想反序列化到POCO这样的:

public class MyDto 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

我目前只是在做这样的:

var dto = JsonSerializer.DeserializeFromString<MyDto>(dtoData); 

但这不会识别属性名称。我以前使用custom ContractResolverNewtonsoft.Json中克服了这个问题。应该如何使用​​来完成?

我不想用DataMember属性修饰我的dto类,因为这似乎是数据源的关注点,而不是dto本身,因此应该由执行反序列化的代码来处理。

回答

8

JsConfig所有不同的配置和定制,这ServiceStack's JSON and text serializers支持,e.g:

JsConfig.EmitLowercaseUnderscoreNames = true; 

应该做你想要什么。

+0

谢谢,这看起来我需要什么。我只需要为特定的dto类型配置它,并且'EmitLowercaseUnderscoreNames'似乎从该配置方法中缺少,将尝试并将今天的解决此问题的pull请求放在一起。 – roryf 2013-02-12 12:30:45

+0

繁荣:https://github.com/ServiceStack/ServiceStack.Text/pull/279 – roryf 2013-02-12 13:16:16

+0

奇怪,我不得不突然使用这个。我想知道某个地方的更新是否会导致默认值发生变化。 – theoutlander 2015-09-22 02:27:09