在服务栈中使用领先的@字符反序列化JSON - c#

下面的代码片段复制了我在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&#…