【问题标题】:Silverlight 4 DataContractJsonSerializer, private fields of a derived classSilverlight 4 DataContractJsonSerializer,派生类的私有字段
【发布时间】:2011-11-19 02:25:21
【问题描述】:

我使用 DataContractJsonSerializer 在 Silverlight 4 中反序列化 json 数据。 Json 数据键名与我的类属性名不匹配;所以我想我必须使用 数据成员属性。所以我做了以下事情:

[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 应用于模型之后,反序列化再次失败,因为我将 DataMember 属性应用于私有字段,而不是公共属性。为什么我不能将它们应用于私人成员(文档似乎另有说明)。

注意:服务器端代码不是 ASP.NET;所以不使用WCF。

【问题讨论】:

    标签: json serialization silverlight-4.0 datacontract datacontractjsonserializer


    【解决方案1】:

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

    【讨论】:

    • 我是否也应该将 InternalsVisibleTo 属性应用于我的程序集?
    • 绝对的;忘了那个小宝石。
    • 如何(不)将 DataContract 属性应用于基类?是全有还是全无?
    • 说实话,我从来没有这样尝试过,我们总是在整个链条中应用它。您遇到了什么错误,或者只是没有序列化?
    • 类似:“类型 '**' 不能继承自未使用 DataContractAttribute 或 SerializableAttribute 标记的类型...”。所以我想我得一路申请下去,但到目前为止我还没有在网上找到任何这样的声明。另外,我发现 SerializableAttribute 在 Silverlight 中不可用。
    猜你喜欢
    • 2020-07-28
    • 2011-06-11
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    相关资源
    最近更新 更多