繁体   English   中英

替换类成员的XML序列化

[英]Replacing XML serialization of class member

在我的类(相机)中,我需要序列化,我有一个成员没有太多序列化方法,并且我无法修改其类。 但是整个类中只有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.positionmarker.rotation我可以重新创建该对象。

如果您不能或不希望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,但是我希望您可以从这一点开始画图。

通过在Camera类中实现IXmlSerializable接口。

检查MSDN以获取更多信息。

或者,您可以使用[XmlIgnore]属性来标记您不想序列化为XML的属性。

检查MSDN以获取更多信息:)。

PS:如果您发布一些代码,我可以为您提供示例,但您可能不需要我。 让我知道你是否愿意。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM