2

下面的代码片段复制了我在 ServiceStack 应用程序中遇到的反序列化问题。在运行以下命令时,正确填充了 consignee 属性,但没有正确填充 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 属性,但这个程序超出了我的控制范围。我了解 JSON 和对象属性之间的 ServiceStack 名称匹配。

我尝试在属性名称后附加一个 @ 但这没有帮助。

//doesn't help
public string @id { get; set;}

有没有办法告诉 ServiceStack 将 @id 反序列化为 id 而无需通过实现自定义反序列化器的过程?

4

1 回答 1

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;

我希望这会有所帮助。

于 2014-07-31T15:30:06.357 回答