【发布时间】:2010-11-10 01:04:51
【问题描述】:
问题:
我有一个类,比如 Foo,它实现了一个 Id 属性。富必须是 可序列化的。 Foo.Id 应在初始化时初始化为新的 GUID 福。 Foo.Id 设置后不应更改。反序列化将尝试设置 Foo.Id,因此必须将其设为 Public。
Private _Id As String=system.Guid.NewGuid.tostring
Public Property Id As String
Get
return _Id
End Get
Set(ByVal value As String)
_Id = value
End Set
End Property
或者对于 c#ers
private string _Id = system.Guid.NewGuid().ToString();
public string Id {
get { return _Id; }
set { _Id = value; }
}
解决思路:
唯一的解决方案似乎是在设置 Foo.Id 时抛出运行时异常,但是 这将在反序列化期间引起问题。所以,我们必须以某种方式 确保仅在尝试 Set Foo.Id 时抛出异常 在序列化程序之外制作。构造函数中的某种标志或其他东西?
编辑、反序列化方法...
public static Foo DeserializeFromFile(string sFilespec)
{
Xml.Serialization.XmlSerializer oSerializer = new Xml.Serialization.XmlSerializer(typeof(Foo));
System.IO.FileStream oStream = new System.IO.FileStream(sFilespec, IO.FileMode.Open);
Foo oObject = oSerializer.Deserialize(oStream);
oStream.Close();
return oObject;
}
【问题讨论】:
-
您使用的是哪种序列化方式,什么版本的 .net?
标签: c# .net serialization constructor properties