Problem:Set Nur auf Deserialisierung
Ich habe eine Klasse, sagen Foo, die eine Id-Eigenschaft implementiert. Foo muss serialisierbar sein. Foo.Id sollte bei der Initialisierung von Foo zu einer neuen GUID initialisiert werden. Foo.Id sollte nach dem Einstellen nicht mehr änderbar sein. Deserialisierung wird versuchen, die Foo.Id festzulegen, also muss sie öffentlich gemacht werden.
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
oder C# ers
private string _Id = system.Guid.NewGuid().ToString();
public string Id {
get { return _Id; }
set { _Id = value; }
}
Lösung Gedanken:
Die einzige Lösung scheint eine Laufzeitausnahme zu werfen, wenn Foo.Id Einstellung, aber wird dies dazu führen, ein Problem bei der Deserialisierung. Also, irgendwie müssen wir sicherstellen, dass die Ausnahme nur ausgelöst wird, wenn ein Versuch von Set Foo.Id außerhalb des Serialisierers vorgenommen wird. Irgendeine Art von Flagge oder etwas im Konstruktor?
bearbeiten, Deserialisierung Methode ...
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;
}
Welche Art von Serialisierung verwenden Sie und welche Version von .net? –