带有奇数字符的JSON序列化

时间:2015-03-20 15:24:02

标签: c# json serialization asp.net-web-api model

最初使用Ruby on Rails编写的应用程序为多个移动应用程序提供API服务;管理层决定将RoR服务的功能添加到基于.NET的主项目中。好吧,没什么大不了的,我们只是在WebAPI中重复服务调用吧?这有多难?

显然有人在Ruby方面认为将额外的字符放入api响应对象会是一个很好的想法。我看到的事情如下:

{
    ...
    {"enabled?":true}
    ...
}

...所以我在这里摇头,并希望有一种技术可以将.NET对象序列化为JSON,其中变量名称有问号和诸如此类的东西。有没有办法做到这一点,或者我们是否必须为每个对象构建自定义序列化器?此时,更改移动应用程序以消耗更多适合平台的JSON实际上是不可取的。我们使用JSON.Net,但如果有其他方法可以做到这一点,那就没关系。

1 个答案:

答案 0 :(得分:2)

在您的c#对象中,为您的属性指定valid name(例如本例中为Enabled),然后在NameDataMember属性中指定JSON属性名称}属性,或PropertyName属性的JsonProperty属性:

[DataContract]
public class MyClass
{
    [DataMember(Name="enabled?")]
    public bool Enabled { get; set; }
}

或者

public class MyClass
{
    [JsonProperty("enabled?")]
    public bool Enabled { get; set; }
}

如果您使用DataMemberAttribute,请不要忘记添加DataContract属性,并且数据合同序列化为opt-in,因此您需要添加{ {1}}到您要序列化的所有属性。但是,在完成此操作后,您将获得与DataContractSerializers的兼容性,这可能会有所帮助。