我使用DataContractJsonSerializer在Silverlight 4中反序列化json数据。 Json数据键名与我的类属性名称不匹配;所以我想我必须使用 DataMemberAttribute。所以我做了以下事情:
[DataContract]
public class Person : Model
{
[DataMember(Name = "id")]
private int _id;
public int Id
{
get { return _id; }
set { _id = value; }
}
[DataMember(Name = "name")]
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
}
现在反序列化失败,因为我没有将DataContractAttribute应用于Person的基类Model。这是严格的要求吗?此外,在我将DataContractAttribute应用于Model之后,反序列化再次失败,因为我将DataMember属性应用于私有字段,而不是公共属性。为什么我不能将它们应用于私人成员(文档似乎另有说法)。
注意:服务器端代码不是ASP.NET;所以不使用WCF。
答案 0 :(得分:1)
为了让私有成员正确地通过WCF进行序列化,我们必须将它们全部更改为protected internal
而不是private
。也许同样适用于DataContractJsonSerializer
?