在我需要序列化的类(Camera)中,我有一个成员没有太多的序列化方法,并且我不能修改它的类。但整个类中只有2-3个参数可以序列化,然后根据这些参数进行反序列化。
XmlSerializer SerializerObj = new XmlSerializer(typeof(Camera));
TextWriter WriteFileStream = new StreamWriter(@"C:\test.xml");
SerializerObj.Serialize(WriteFileStream, cc);
WriteFileStream.Close();如何以及在何处放置自定义序列化代码,以便从object获取这2-3个参数并提供给序列化程序,然后在反序列化期间使用这2-3个参数再次创建对象。
更新。示例代码如下:
[Serializable()]
public class Camera
{
public string name;
public int index;
public double distance;
public List<string> CameraList { get; set; }
[XmlIgnore()]
public GMarkerGoogle marker;
public Camera()
{
}
}marker是没有序列化方法的成员。但是有了marker.position,marker.rotation,我就可以重新创建这个对象。
发布于 2013-03-16 21:28:01
如果不能或不想对GMarker进行Xml序列化,那么一定要序列化重构它所需的属性(就像您已经建议的那样)。这样,您就可以创建一个带有后备字段的属性来懒惰地重新创建GMarker。
[Serializable()]
public class Camera
{
public string name;
public int index;
public double distance;
public List<string> CameraList { get; set; }
private GMarkerGoogle _marker;
[XmlIgnore()]
public GMarkerGoogle Marker
{
set
{
_marker = value;
MarkerPosition = _marker.position;
MarkerRotation = _marker.rotation;
}
get
{
if (_marker == null)
{
_marker = new GMarkerGoogle(MarkerPosition, MarkerRotation);
}
return _marker;
}
}
public double MarkerPosition { get; set; }
public double MarkerRotation { get; set; }
public Camera()
{
}
}这有帮助吗?我编了一两个东西,因为我不知道标记的API,但我希望你能从这一点开始画出来。
发布于 2013-03-16 20:56:23
通过在Camera类中实现IXmlSerializable接口。
有关更多信息,请查看MSDN。
或者,您可以使用XML属性来标记不希望序列化为[XmlIgnore]的属性。
查看MSDN了解更多信息:)。
附言:如果你发布一些代码,我可以给你看一个例子,但你可能不需要我。不过,如果你这样做了,请告诉我。
https://stackoverflow.com/questions/15449473
复制相似问题