I'm trying to serialize an object to XML that has a number of properties, some of which are readonly.
public Guid Id { get; private set; }
I have marked the class [Serializable] and I have implemented the ISerializable interface.
Below is the code I'm using to serialize my object.
public void SaveMyObject(MyObject obj)
{
XmlSerializer serializer = new XmlSerializer(typeof(MyObject));
TextWriter tw = new StreamWriter(_location);
serializer.Serialize(tw, obj);
tw.Close();
}
Unfortunately it falls over on the first line with this message.
InvalidOperationException was unhandled:
Unable to generate a temporary class (result=1).
error CS0200: Property or indexer 'MyObject.Id' cannot be assigned to — it is read only
If I set the Id property to public it works fine. Can someone tell me if I'm doing something, or at least if its even possible?
Best Solution
You could use
DataContractSerializer
(but note you can't use xml attributes - only xml elements):Alternatively, you can implement
IXmlSerializable
and do everything yourself - but this works withXmlSerializer
, at least.