1

シリアル化する必要がある私のクラス(カメラ)には、シリアル化の手段があまりないメンバーが1つあり、そのクラスを変更できません。しかし、クラス全体のうち、シリアル化してからそれに基づいて逆シリアル化できるパラメーターは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オブジェクトを再作成できます。

4

2 に答える 2

1

GMarkerを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つか2つ作りましたが、これから絵を描いていただければと思います。

于 2013-03-16T13:28:01.107 に答える
0

クラスにIXmlSerializableインターフェースを実装する。Camera

詳細については、 MSDNを確認してください。

または、属性を使用して、[XmlIgnore]XMLにシリアル化しないプロパティにフラグを立てることもできます。

詳細については、 MSDNを確認してください:)。

PS:コードを投稿すると、例を示すことができますが、おそらく私は必要ありません。もしそうなら私に知らせてください。

于 2013-03-16T12:56:23.110 に答える