下面的代码片段复制了我在ServiceStack应用程序中遇到的反序列化问题。
在运行以下命令时,收货人属性正确填充,但id未填充。
static void Main (string[] args)
{
string json = "{\"@id\":\"abcd\",\"consignee\":\"mr mann\"}";
shipment some_shipment = new shipment();
some_shipment = json.FromJson<shipment>();
Console.Read();
}
class shipment
{
public string id { get; set; }
public string consignee { get; set; }
}
生成JSON的库在某些元素前面添加了@,以指示它们来自XML属性,但是该程序超出了我的控制范围。
我了解ServiceStack名称在JSON和对象属性之间匹配。
我尝试将@附加到属性名称,但这无济于事。
//doesn't help
public string @id { get; set;}
有没有一种方法可以告诉ServiceStack将@id反序列化为id,而无需执行实现自定义反序列化程序的过程?
参考方案
您需要使用[DataMember]
属性来告诉ServiceStack要序列化的字段名称。执行此操作时,将使用[DataContract]
,然后要求所有其他字段都标有[DataMember]
。即他们选择加入。
因此,您的Shipping
类变为:
[DataContract]
class shipment
{
[DataMember(Name="@id")]
public string id { get; set; }
[DataMember]
public string consignee { get; set; }
}
您将需要引用using System.Runtime.Serialization;
希望对您有所帮助。
JSON PATH字段NULL检查表达式 - java我有一个像bellow的json数组:{ "store": { "book": [ { "category": "reference", "author": "Nigel Rees", "title": "Sa…
json_encode网址失败 - php有人在this bug附近吗?echo json_encode(array('url'=>'/foo/bar')); {"url":"\/foo\/bar"} 我使用Zend_Json and Zend_Json_Expr以便我甚至可以在js对象中获取回调函数-但我无法获得…
json.dumps弄乱顺序 - python我正在使用json module创建一个包含类似条目的json文件json.dumps({"fields": { "name": "%s", "city": "%s", "status": "%s", "cou…
JSON SCHEMA PATTERN逗号分隔列表 - python我的json模式中具有以下模式,并且我需要根据以下模式包含逗号分隔的值。当前模式只能像DV2一样处理一种模式所以我应该如何修改我的模式以包括多个字符串,如下所示,但它应该与声明的模式匹配。例如:“ DV2”,“ DEV1”,“ DEV3”,“ ST”, "ENVIRONMENT": { "type": "st…
JSON.NET如何删除节点 - c#我有一个像下面这样的json:{ "d": { "results": [ { "__metadata": { }, "prop1": "value1", "prop2": "value2", "__some…