JSON 奇数字符序列化
JSON serialization with odd characters
有一个最初在 Rails 上用 Ruby 编写的应用程序为多个移动应用程序提供 API 服务;管理层已决定将 RoR 服务的功能添加到基于 .NET 的主项目中。好的,没什么大不了的,我们只是在 WebAPI 中复制服务调用,对吧?能有多难?
显然 Ruby 一方的某个人认为将额外的字符放入 api 响应对象中是个好主意。我看到的是:
{
...
{"enabled?":true}
...
}
...所以我在这里,对此摇头,并希望有一种技术可以将 .NET 对象序列化为 JSON,其中变量名称带有问号等等。有没有办法做到这一点,或者我们是否必须为这些对象中的每一个构建自定义序列化程序?将移动应用程序更改为对平台更友好 JSON 在这一点上确实不可取。我们使用JSON.Net,但如果有其他方法可以做到这一点。
在你的 c# 对象中,给你的 属性 一个 valid name (such as Enabled
in this case) and then specify the JSON property name in the Name
property of a DataMember
attribute, or the PropertyName
property of a 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
attribute, and that data contract serialization is opt-in, so you'll need to add DataMember
to all the attributes you want to serialize. Having done so, however, you'll gain compatibility with the DataContractSerializers,这在以后可能会有用。
有一个最初在 Rails 上用 Ruby 编写的应用程序为多个移动应用程序提供 API 服务;管理层已决定将 RoR 服务的功能添加到基于 .NET 的主项目中。好的,没什么大不了的,我们只是在 WebAPI 中复制服务调用,对吧?能有多难?
显然 Ruby 一方的某个人认为将额外的字符放入 api 响应对象中是个好主意。我看到的是:
{
...
{"enabled?":true}
...
}
...所以我在这里,对此摇头,并希望有一种技术可以将 .NET 对象序列化为 JSON,其中变量名称带有问号等等。有没有办法做到这一点,或者我们是否必须为这些对象中的每一个构建自定义序列化程序?将移动应用程序更改为对平台更友好 JSON 在这一点上确实不可取。我们使用JSON.Net,但如果有其他方法可以做到这一点。
在你的 c# 对象中,给你的 属性 一个 valid name (such as Enabled
in this case) and then specify the JSON property name in the Name
property of a DataMember
attribute, or the PropertyName
property of a 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
attribute, and that data contract serialization is opt-in, so you'll need to add DataMember
to all the attributes you want to serialize. Having done so, however, you'll gain compatibility with the DataContractSerializers,这在以后可能会有用。