在我的类(Camera)中,我需要序列化,我有一个没有太多序列化手段的成员,我无法修改它的类。但是全班只有2-3个参数可以序列化,然后根据它进行反序列化。
XmlSerializer SerializerObj = new XmlSerializer(typeof(Camera));
TextWriter WriteFileStream = new StreamWriter(@"C:\test.xml");
SerializerObj.Serialize(WriteFileStream, cc);
WriteFileStream.Close();
我如何以及在何处放置自定义序列化代码,从对象中获取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
我可以重新创建该对象。
答案 0 :(得分:1)
如果您不能或不希望Xml序列化您的GMarker,请确保您序列化重建它所需的属性(您已经建议的那种)。这样你就可以创建一个带有支持字段的属性来延迟重新创建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,但我希望你可以从这一点开始绘制图片。
答案 1 :(得分:0)