簡體   English   中英

在XML序列化和反序列化(C#)之間保持對象值

[英]Keeping object values between XML Serialization and Deserialization (C#)

我有一個類,我正在嘗試使用XMLSerializer序列化和反序列化。 那個班看起來像這樣:

namespace AutoCAD_Adapter
{
    /// <summary>
    /// Test class meant to be serialized to test serialization methods
    /// </summary>
    [Serializable]
    public class SerializeTest// : ISerializable
    {
        #region class variables
        private int x;
        private int y;
        #endregion

        #region Constructors
        public SerializeTest(int passedX, int passedY)
        {
            this.x = passedX;
            this.y = passedY;
        }

        private SerializeTest()
        {

        }

        #endregion

        #region Public methods
        public void setX(int x)
        {
            this.x = x;
        }

        public int getX()
        {
            return this.x;
        }

        public void setY(int y)
        {
            this.y = y;
        }

        public int getY()
        {
            return this.y;
        }



        #endregion
    }
}

我知道XMLSerialization的問題是沒有空構造函數的類,我通過創建私有默認構造函數來處理這些參數。 注意到,這是我的實施:

public void XMLSave()
{
    SerializeTest input = new SerializeTest(4, 8); //Object to serialize
    using (MemoryStream stream = new MemoryStream())
    {
        XmlSerializer serializer = new XmlSerializer(st.GetType());
        serializer.Serialize(stream, input);
        stream.Position = 0;
        SerializeTest output = serializer.Deserialize(stream) as SerializeTest;
        MessageBox.Show(output.getX() + " " + output.getY(), "Output", MessageBoxButtons.OK);
    }
}

在執行時,我希望MessageBox顯示(4,8)的值,但它顯示(0,0)。 我需要能夠在整個序列化期間保留對象值,最好是在維護XML序列化時。

您的數據未被序列化,因為它由私有字段保存。 只有公共成員被序列化。 正如評論中提到的,您是Java開發人員,因此您需要查看屬性 使用它們你的模型可能看起來像這樣:

public class SerializeTest
{
    public int X { get; set; }
    public int Y { get; set; }

    public SerializeTest(int x, int y)
    {
        X = x;
        Y = y;
    }

    public SerializeTest()
    {
    }
}

現在您可以輕松地序列化和反序列化它:

var input = new SerializeTest(4, 8);

using (var ms = new MemoryStream())
{
    var serializer = new XmlSerializer(typeof(SerializeTest));
    serializer.Serialize(ms, input);
    ms.Position = 0;

    var output = serializer.Deserialize(ms) as SerializeTest;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM