2012-01-21 3 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() 
    { 
    } 

}

모든 필드는 비어 있지! deserialization 후 _iconUri 및 _stringUri 필드를 제외한 모든 필드가 empry가 아닙니다. 왜 그런 일이 일어 났습니까? 답장을 기다리고 있습니다. 감사합니다.

+0

Uri 클래스가 직렬화되지 않았기 때문에 어떤 직렬화를 사용하고 있습니까? 유형을 문자열로 변경하고 Uri를 변환하고 반환하는 다른 속성을 유지하십시오. –

답변

3

두 사람은 세터가 없습니다. Silverlight에는 개인 필드에 액세스하여 속일 수없는 제한된 보안 모델이 있습니다. 공개 회원 만 액세스 할 수 있습니다. 따라서 SL에있는 대부분의 시리얼 라이저로 작업하기를 원한다면 공개 속성을 속성에 추가하십시오.

구체적으로 _name이 Name setter에 의해 설정되고 _items가 field-initializer를 통해 생성자에 설정됩니다.

+0

Marc Gravell 감사합니다! – Alekstim

관련 문제