下面的代码片段复制了我在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而不经过实现自定义反序列化器的过程?
答案 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;
我希望有所帮助。