0

我使用DataContractJsonSerializer反序列化Silverlight 4中的Json數據。 Json數據鍵名稱與我的類屬性名稱不匹配;所以我想我必須使用 DataMemberAttribute。所以,我做了以下內容:因爲我沒有申請DataContractAttribute對人的基類型號Silverlight 4 DataContractJsonSerializer,派生類的私有字段

[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應用於Model之後,反序列化再次失敗,因爲我將DataMember屬性應用於私有字段,而不是公共屬性。爲什麼我不能將它們應用於私人成員(文檔似乎另有說明)。

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

回答

1

爲了讓私人成員正確地通過WCF序列化,我們必須將它們全部更改爲protected internal而不是private。也許這同樣適用於DataContractJsonSerializer

+0

我是否也將InternalsVisibleTo屬性應用於我的程序集?絕對; – synergetic

+0

絕對;忘了那個小寶石。 –

+0

如何(不)將DataContract屬性應用於基類?這是全部還是全無? – synergetic