有谁能告诉我为什么我的输出会复制'FirstNode'?
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Xml.Serialization;
class Program
{
static void Main(string[] args)
{
Root root = new Root();
FirstNode firstNode = new FirstNode();
firstNode.Data = "DATA";
root.FirstNode.Add(firstNode);
XmlSerializer s = new XmlSerializer(typeof(Root));
StringWriter sw = new StringWriter();
s.Serialize(sw, root);
string serializedXml = sw.ToString();
Console.WriteLine(serializedXml);
Console.ReadKey();
}
}
public class Root
{
List<FirstNode> firstNode = new List<FirstNode>();
public List<FirstNode> FirstNode
{
get { return firstNode; }
set { firstNode = value; }
}
}
public class FirstNode
{
string data;
public string Data
{
get { return data; }
set { data = value; }
}
}
<Root>
<FirstNode>
<FirstNode>
<Data>DATA</Data>
</FirstNode>
</FirstNode>
</Root>
预期产出
<Root>
<FirstNode>
<Data>DATA</Data>
</FirstNode>
</Root>
答案 0 :(得分:1)
好吧,如果你看起来你有一个属性名为FirstNode的存储列表,并且在List中你存储的是FirstNode对象...... 如果你想看到它只是在Root to Nodes类中更改属性FirstNode的名称,你会看到一个不同的输出
<Root>
<Nodes>
<FirstNode>
<Data>DATA</Data>
</FirstNode>
</Nodes>
</Root>
Root标记出现是因为是Object Type,还有FirsNode,那么你有像Data和Nodes这样的标签(在我的例子中)因为是这些类的序列化属性
答案 1 :(得分:0)
认为这是这一行:
root.FirstNode.Add(firstNode);
您正在向第一个节点添加第一个节点,从而获得第一个节点的两个层。
答案 2 :(得分:0)
你想:
[XmlElement("FirstNode")]
public List<FirstNode> FirstNode
{
get { return firstNode; }
set { firstNode = value; }
}
这只会为内容项添加<FirstNode>
- 而不是列表本身。如果您想要更好的控制,您可能还需要查看[XmlArray]
/ [XmlArrayItem]
。