我需要创建带有序列化的嵌套 Xml。我有两个列表,其中的数据必须生成按数字过滤的嵌套 xml。
列表:
List<Person> personList = new List<Person>();
personList.Add(new Person{
Number = 1,
Name = "Dean"
});
personList.Add(new Person{
Number = 2,
Name = "Mike"
});
List<Home> homeList= new List<Home>();
homeList.Add(new Home{
Number = 2,
City= "Paris",
State = "France"
});
homeList.Add(new Home{
Number = 1,
City= "London",
State = "England"
});
所以接下来我有用于序列化的类:
public class CreateXML
{
[XElement(ElementName = "Home")]
List<Home> homeList= new List<Home>();
[XElement(ElementName = "Person")]
List<Person> personList = new List<Person>();
}
创建 XML 的方法:
public void Serialize(CreateXML list)
{
XmlSerializer serializer = new XmlSerializer(typeof(CreateXML));
using (TextWriter writer = new StreamWriter(@"D:\XmlTEST.txt"))
{
serializer.Serialize(writer, list);
}
}
现在它首先生成 Xml 文件,其中包含所有 Person 数据,然后是 Home 数据。
实际输出:
<Person>
<number>1<number>
<name>Dean</name>
</Person>
<Person>
<number>2<number>
<name>Mike</name>
</Person>
<Home>
<number>1</number>
<city>London</city>
<state>England</state>
</Home>
<number>2</number>
<city>Paris</city>
<state>London</state>
</Home>
想要的输出:
<Person>
<number>1<number>
<name>Dean</name>
<Home>
<number>1</number>
<city>London</city>
<state>England</state>
</Home>
</Person>
<Person>
<number>2<number>
<name>Mike</name>
<Home>
<number>2</number>
<city>Paris</city>
<state>France</state>
</Home>
</Person>
有什么建议吗?
最佳答案
您想将某个Home
与Person
Dean 相关联:
<Person>
<number>1</number>
<name>Dean</name>
<Home>
<number>1</number>
<city>London</city>
<state>England</state>
</Home>
</Person>
但是在您的代码中您没有关联这两个实体:
personList.Add(new Person {
Number = 1,
Name = "Dean"
});
homeList.Add(new Home{
Number = 1,
City= "London",
State = "England"
});
在上面的示例中,实体是完全不相关的——您需要以某种方式将它们关联起来。
关联这些实体的一种方法是在 Person
类型上定义一个 Home
属性:
public class Person
{
public string Name { get; set; }
public int Number { get; set; }
public Home Home { get; set; }
}
然后放弃 homeList
并将 Home
实例分配给 Person
实例:
List<Person> personList = new List<Person>();
personList.Add(new Person
{
Number = 1,
Name = "Dean",
Home = new Home
{
Number = 1,
City = "London",
State = "England"
}
});
输出:
<personList>
<Person>
<Name>Dean</Name>
<Number>1</Number>
<Home>
<Number>2</Number>
<City>Paris</City>
<State>France</State>
</Home>
</Person>
<Person>
<Name>Mike</Name>
<Number>2</Number>
<Home>
<Number>1</Number>
<City>London</City>
<State>England</State>
</Home>
</Person>
</personList>
更新
根据您的评论,您可以动态分配给 Home
属性,如下所示:
foreach (var home in homeList)
{
foreach (var person in personList)
{
if (home.Number == person.Number)
{
person.Home = home;
}
}
}
请记住,如果没有相应的门牌号,House
属性将保持为 null
。
关于c# - 嵌套的 XML 序列化 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31675019/