我在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字段外,所有字段都不是空的。 为什么会这样? 我等着你的回复。 谢谢!
答案 0 :(得分:3)
这两个人没有二传手。 Silverlight具有受限制的安全模型,您无法通过访问私有字段来欺骗;只能访问公共成员。因此:如果您希望它们与SL上的大多数序列化程序一起使用,请将公共setter添加到这些属性中。
具体来说:_name由Name setter设置,_items通过field-initializer在构造函数中设置。