C#使用其中的对象列表序列化对象
在C#中,如果我序列化一个包含对象列表的对象,它还会序列化列表吗?
例
public class Move { public string MoveName {get; set;} public List oTags = new List; } public class Tag { public string TagName {get; set;} }
如果我序列化移动,那么存储在move中的所有标签也会被序列化吗? 此外,如果它不会序列化列表,我将如何做到这一点?
name Value ...
是的,使用XmlSerializer
它将序列化List
,只要T
(或在您的情况下为Tag
)是可序列化的。
Move move = new Move { MoveName = "MyName" }; move.oTags.Add(new Tag { TagName = "Value1" } ); move.oTags.Add(new Tag { TagName = "Value2" } ); move.oTags.Add(new Tag { TagName = "Value3" } ); StringBuilder output = new StringBuilder(); var writer = new StringWriter(output); XmlSerializer serializer = new XmlSerializer(typeof(Move)); serializer.Serialize(writer, move); Console.WriteLine(output.ToString());
这将使用您当前的类结构输出:
Value1 Value2 Value3 MyName
我会看看我是否能找到匹配当前XML模式的方法,但是你可以查看如何应用XmlAttributes并自己玩它。
编辑:
如果您更改类声明以使用以下XmlAttributes,您将获得与示例中一样的确切XML模式:
public class Move { [XmlElement(Order = 1)] public string MoveName {get; set;} [XmlElement(Order = 2, ElementName = "Tags")] public List oTags = new List (); } public class Tag { [XmlText] public string TagName {get; set;} }
哪个序列化将产生:
MyName Value1 Value2 Value3
您确定您的课程声明在您的问题中是否正确? 你只是宣布Public Move
,它应该是Public class Move
试试这个代码
XmlSerializer serializer = new XmlSerializer(typeof(YourClass));
在你的情况下
Move m = new Move(); m.oTags.Add(new Tag() { TagName = "X" }); m.oTags.Add(new Tag() { TagName = "XX" }); XmlSerializer x = new XmlSerializer(typeof(Move)); System.IO.Stream s; var xmlwriter = System.Xml.XmlWriter.Create("C:\\MXL.txt"); x.Serialize(xmlwriter, m);
产量
X XX
默认情况下,不会,因为列表中的项目可能无法序列化。
如果是,那么您可能会发现以下页面有用:
XML Serialize可序列化对象的通用列表