2012-01-21 4 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

これらの2人にはセッターがありません。 Silverlightには限定されたセキュリティモデルがあります。プライベートフィールドにアクセスすることでカンニングすることはできません。パブリックメンバーだけにアクセスできます。したがって、パブリックセッターをSL上のほとんどのシリアライザと連携させたい場合は、それらのプロパティにパブリックセッターを追加してください。

具体的には、_nameが名前セッターによって設定されており、_itemsがフィールド初期化子を介してコンストラクターに設定されています。

+0

Marc Gravellありがとう! – Alekstim

関連する問題