Silverlight 4 DataContractJsonSerializer,派生类的私有字段

时间:2011-11-19 02:25:22

标签: json serialization silverlight-4.0 datacontract datacontractjsonserializer

我使用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。

1 个答案:

答案 0 :(得分:1)

为了让私有成员正确地通过WCF进行序列化,我们必须将它们全部更改为protected internal而不是private。也许同样适用于DataContractJsonSerializer