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可序列化对象的通用列表