将对象值保持在 XML 序列化和反序列化之间 (C#)
Keeping object values between XML Serialization and Deserialization (C#)
我有一个 class,我正在尝试使用 XMLSerializer 对其进行序列化和反序列化。 class 看起来像这样:
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
}
}
我知道 XML序列化的 classes 没有空构造函数参数的问题,我已经通过创建私有默认构造函数来解决这个问题。注意,这是我的实现:
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 序列化的同时。
您的数据未序列化,因为它由私有字段保存。仅 public 成员被序列化。如评论中所述,您是 Java 开发人员,因此您需要查看 properties。使用它们你的模型可能看起来像这样:
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;
}
我有一个 class,我正在尝试使用 XMLSerializer 对其进行序列化和反序列化。 class 看起来像这样:
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
}
}
我知道 XML序列化的 classes 没有空构造函数参数的问题,我已经通过创建私有默认构造函数来解决这个问题。注意,这是我的实现:
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 序列化的同时。
您的数据未序列化,因为它由私有字段保存。仅 public 成员被序列化。如评论中所述,您是 Java 开发人员,因此您需要查看 properties。使用它们你的模型可能看起来像这样:
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;
}