有没有办法转储deux类:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
public List<Address> Addresses { get; set; }
}
public class Address
{
public string Street { get; set; }
public int Number { get; set; }
public int Zipcode { get; set; }
public string Locality { get; set; }
}
我想要像下面这样的东西。你认为这可能吗?我怎样才能做到这一点 ? 重要的是,这里是一个类Person,它是一个例子。我希望能够使用相同的转储代码来使用我的所有类
更新1 我不仅需要“结构”,而且“结构”+数据和类不是可序列化的
<Person>
<FirstName></FirstName>
<LastName></LastName>
<Age></Age>
<Addresses>
<Address>
<Street></Street>
<Number></Number>
<Zipcode></Zipcode>
<Locality></Locality>
</Address>
<Address>
<Street></Street>
<Number></Number>
<Zipcode></Zipcode>
<Locality></Locality>
</Address>
</Addresses>
</Person>
由于
答案 0 :(得分:1)
如果您需要这种特殊的xml格式,那么您可以通过反射轻松实现此目的。
你可以写一个类似的方法:
public string DumpClass(object obj) {}
在你的方法中,只需获取对象的类型,然后以递归方式遍历其属性。
或者您可以使用XmlSerializer,它的格式不一样,但它会将您的类序列化为非常易读的xml。 (这里有一个例子:http://www.jonasjohn.de/snippets/csharp/xmlserializer-example.htm)
答案 1 :(得分:0)
我建议使用XElement将此文件创建为XML,然后将字符串保存到文本文件中。只需将空字符串""
放在变量对每个标记的位置。您也可以使用xml serialization并将其写入文件。
答案 2 :(得分:0)
试试这个:
[Serializable()]
[XmlRoot("Person")]
public class Person
{
XmlElement("FirstName")]
public string FirstName { get; set; }
XmlElement("LastName")]
public string LastName { get; set; }
XmlElement("Age")]
public int Age { get; set; }
[XmlArray("Addresses")]
[XmlArrayItem("Address", typeof(Address))]
public List<Address> Addresses { get; set; }
}
[Serializable()]
public class Address
{
[XmlElement("Street")]
public string Street { get; set; }
[XmlElement("Number")]
public int Number { get; set; }
[XmlElement("Zipcode")]
public int Zipcode { get; set; }
[XmlElement("Locality")]
public string Locality { get; set; }
}
序列化:
Person person = new Person();
XmlSerializer serializer = new XmlSerializer(typeof(Person));
StreamWriter writer = new StreamWriter(file_path);
serializer.Serialize(writer, person);
writer.Close();
反序列化:
XmlSerializer serializer = new XmlSerializer(typeof(Person));
StreamReader reader = new StreamReader(file_path);
Person person = (Person)serializer.Deserialize(reader);
reader.Close();
答案 3 :(得分:0)
要转储你的类,我认为使用真正的XmlSerialization比你定义的更好。它几乎是一样的,但Xml是标准的。
public void SerializeObject<T>(T obj)
{
using (StreamWriter sw = new StreamWriter("your path"))
{
new XmlSerializer(typeof(T)).Serialize(sw, obj);
}
}
public T DeserializeObject<T>()
{
T obj;
using (StreamReader sr = new StreamReader("your path"))
{
obj = (T)new XmlSerializer(typeof(T)).Deserialize(sr);
}
return obj;
}
你可以像这样使用它:
Person p = new Person();
SerializeObject(p);
这是输出的样子,没有对Person类进行任何修改(不需要任何[Serializable]标签):
<?xml version="1.0" encoding="utf-8"?>
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<FirstName>f</FirstName>
<LastName>l</LastName>
<Age>50</Age>
<Addresses>
<Address>
<Street>s</Street>
<Number>1</Number>
<Zipcode>1</Zipcode>
<Locality>l</Locality>
</Address>
<Address>
<Street>s2</Street>
<Number>12</Number>
<Zipcode>12</Zipcode>
<Locality>l2</Locality>
</Address>
</Addresses>
</Person>