在Silverlight项目中反序列化后,某些字段为空

时间:2012-01-21 11:02:00

标签: c# silverlight serialization deserialization

我在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 个答案:

答案 0 :(得分:3)

这两个人没有二传手。 Silverlight具有受限制的安全模型,您无法通过访问私有字段来欺骗;只能访问公共成员。因此:如果您希望它们与SL上的大多数序列化程序一起使用,请将公共setter添加到这些属性中。

具体来说:_name由Name setter设置,_items通过field-initializer在构造函数中设置。