Oce*_*ean 11 c# xml serialization list
我有A班.B班和C班是A班的一部分.
Class A
{
//Few Properties of Class A
List<typeof(B)> list1 = new List<typeof(B)>()
List<typeof(C)> list2 = new List<typeof(C)>()
Nsystem NotSystem { get; set; } // Enum Property Type
}
public enum Nsystem {
A = 0,
B = 1,
C = 2
}
Run Code Online (Sandbox Code Playgroud)
我想序列化A类,并希望用它生成XML; 我还想序列化list1和list2以及枚举...
序列化这个XML有什么好方法,因为我需要将Object转换为XML和XML转换为Object的功能......
有什么好的选择呢?谢谢
Bro*_*ass 10
您可以使用XMLSerializer:
var aSerializer = new XmlSerializer(typeof(A));
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
aSerializer.Serialize(sw, new A()); // pass an instance of A
string xmlResult = sw.GetStringBuilder().ToString();
Run Code Online (Sandbox Code Playgroud)
为了使其正常工作,您还需要对类型进行xml注释,以确保使用正确的命名进行序列化,即:
public enum NSystem { A = 0, B = 1, C = 2 }
[Serializable]
[XmlRoot(ElementName = "A")]
Class A
{
//Few Properties of Class A
[XmlArrayItem("ListOfB")]
List<B> list1;
[XmlArrayItem("ListOfC")]
List<C> list2;
NSystem NotSystem { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
编辑:
Enum默认情况下,属性是序列化的,属性名称包含XML元素,其枚举值为XML值,即如果NotSystem示例中的属性具有值C,则将其序列化为
<NotSystem>C</NotSystem>
Run Code Online (Sandbox Code Playgroud)
当然,您总是可以通过执行正确的注释来更改属性序列化的方式,即使用 [XmlAttribute]它将序列化为属性,或者 [XmlElement("Foobar")]使用Foobar元素名称进行序列化.有关MSDN的更多文档,请查看上面的链接.
使用IO错误捕获对任何对象进行二进制序列化的简单方法。
List<Cookie> asdf = new List<Cookie>();
//Serialization
Serializer.Save("data.bin", asdf);
//Deserialization
asdf = Serializer.Load<List<Cookie>>("data.bin");
Run Code Online (Sandbox Code Playgroud)
序列化器类:
public static class Serializer
{
public static void Save(string filePath, object objToSerialize)
{
try
{
using (Stream stream = File.Open(filePath, FileMode.Create))
{
BinaryFormatter bin = new BinaryFormatter();
bin.Serialize(stream, objToSerialize);
}
}
catch (IOException)
{
}
}
public static T Load<T>(string filePath) where T : new()
{
T rez = new T();
try
{
using (Stream stream = File.Open(filePath, FileMode.Open))
{
BinaryFormatter bin = new BinaryFormatter();
rez = (T) bin.Deserialize(stream);
}
}
catch (IOException)
{
}
return rez;
}
}
Run Code Online (Sandbox Code Playgroud)