最初使用Ruby on Rails编写的应用程序为多个移动应用程序提供API服务;管理层决定将RoR服务的功能添加到基于.NET的主项目中。好吧,没什么大不了的,我们只是在WebAPI中重复服务调用吧?这有多难?
显然有人在Ruby方面认为将额外的字符放入api响应对象会是一个很好的想法。我看到的事情如下:
{
...
{"enabled?":true}
...
}
...所以我在这里摇头,并希望有一种技术可以将.NET对象序列化为JSON,其中变量名称有问号和诸如此类的东西。有没有办法做到这一点,或者我们是否必须为每个对象构建自定义序列化器?此时,更改移动应用程序以消耗更多适合平台的JSON实际上是不可取的。我们使用JSON.Net,但如果有其他方法可以做到这一点,那就没关系。
答案 0 :(得分:2)
在您的c#对象中,为您的属性指定valid name(例如本例中为Enabled
),然后在Name
的DataMember
属性中指定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的兼容性,这可能会有所帮助。