使用servicestack中的前导@chars反序列化JSON

时间:2014-07-31 14:26:06

标签: c# json servicestack servicestack-text

下面的代码片段复制了我在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而不经过实现自定义反序列化器的过程?

1 个答案:

答案 0 :(得分:5)

您需要使用[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;

我希望有所帮助。