2012-01-21 38 views
1

我的Silverlight項目中存在反序列化問題。我有這個方法和變量的類Obj。Silverlight項目中的反序列化後,某些字段爲空

public class Obj 
{ 
    private string _name; 
    private Uri _iconUri; 
    private string _stringUri; 
    private List<ObjItem> _items = new List<ObjItem>(); 

    public List<ObjItem> Items 
    { 
     get { return _items; } 
    } 
    public string Name 
    { 
     get { return _name; } 
     set { _name = value; } 
    } 
    public Uri IconUri 
    { 
     get 
     { 
      return _iconUri; 
     } 
    } 
    public string StringUri { get { return _stringUri; } } 
    public int Count 
    { 
     get { return _items.Count; } 
    } 

    public Obj(string name,string uriString = null) 
    { 
     _name = name; 
     if (uriString == null) 
     { 
      _iconUri = null; 
     } 
     else 
     { 
      _iconUri = new Uri(uriString, UriKind.Relative); 
     } 
     _stringUri = uriString; 
    } 
    // for deserialization 
    public Obj() 
    { 
    } 

}

串行化之前的所有字段不爲空! 反序列化後,除了_iconUri和_stringUri字段外,所有字段都不是空的。 爲什麼發生? 我會等待你的回覆。 謝謝!

+0

因爲Uri類不是可序列化的,我猜你正在使用哪個序列化?將類型更改爲字符串,並保留轉換並返回的另一個屬性Uri –

回答

3

那兩個沒有setter。 Silverlight有一個受限制的安全模型,你無法通過訪問私有域來作弊;只有公共成員可以訪問。因此:如果您希望它們與SL上的大多數序列化器一起使用,請將公共setter添加到這些屬性。

具體而言:_name由Name設置器設置,_items通過field-initializer在構造函數中設置。

+0

Marc Gravell謝謝! – Alekstim

相關問題