簡體   English   中英

C#使用其中的對象列表序列化對象

[英]C# Serialize an object with a list of objects in it

在C#中,如果我序列化一個包含對象列表的對象,它還會序列化列表嗎?

public class Move {
    public string MoveName {get;  set;}

    public List<Tag> oTags = new List<Tag>;
}

public class Tag {
    public string TagName {get; set;}
}

如果我序列化移動,那么存儲在move中的所有標簽也會被序列化嗎? 此外,如果它不會序列化列表,我將如何做到這一點?

<Move>
  <MoveName>name</MoveName>
  <Tag>Value</Tag>
  ...
</Move>

是的,使用XmlSerializer ,它將序列化List<T> ,只要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());

這將使用您當前的類結構輸出:

<?xml version="1.0" encoding="utf-16"?>
<Move xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <oTags>
    <Tag>
      <TagName>Value1</TagName>
    </Tag>
    <Tag>
      <TagName>Value2</TagName>
    </Tag>
    <Tag>
      <TagName>Value3</TagName>
    </Tag>
  </oTags>
  <MoveName>MyName</MoveName>
</Move>

我將看看是否可以找到匹配當前XML模式的方法,但是您可以查找如何應用XmlAttributes並自己使用它。


編輯:

如果您更改類聲明以使用以下XmlAttributes,您將獲得與示例中相同的XML模式:

public class Move 
{
    [XmlElement(Order = 1)]
    public string MoveName {get; set;}

    [XmlElement(Order = 2, ElementName = "Tags")]
    public List<Tag> oTags = new List<Tag>();
}

public class Tag 
{
    [XmlText]
    public string TagName {get; set;}
}

哪個序列化會產生:

<?xml version="1.0" encoding="utf-16"?>
<Move xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <MoveName>MyName</MoveName>
  <Tags>Value1</Tags>
  <Tags>Value2</Tags>
  <Tags>Value3</Tags>
</Move>

您確定您的課程聲明在您的問題中是否正確? 你只是宣布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);

產量

    <?xml version="1.0" encoding="utf-8"?>
    <Move xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <oTags>
<Tag>
  <TagName>X</TagName>
</Tag>
<Tag>
   <TagName>XX</TagName>
</Tag>
</oTags></Move>

默認情況下,不會,因為列表中的項目可能無法序列化。

如果是,那么您可能會發現以下頁面有用:

XML Serialize可序列化對象的通用列表

暫無
暫無

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

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