Некоторые поля пусты после десериализации в проекте Silverlight - PullRequest
1 голос
/ 21 января 2012

У меня проблема с десериализацией в моем проекте Silverlight. У меня есть класс Obj с этими методами и переменными.

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. Почему это случилось? Я буду ждать ваших ответов. Спасибо!

1 Ответ

3 голосов
/ 21 января 2012

У этих двоих нет сеттеров. Silverlight имеет ограниченную модель безопасности, где вы не можете обмануть, используя частные поля; только публичные участники могут быть доступны. Итак: добавьте публичные сеттеры в эти свойства, если вы хотите, чтобы они работали с большинством сериализаторов на SL.

Чтобы быть точным: _name устанавливается установщиком Name, а _items устанавливается в конструкторе через инициализатор поля.

...