在日志文件中转储C#类
本文关键字:转储 日志 文件 | 更新日期: 2023-09-27 18:28:19
有没有办法转储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>
感谢
如果您需要这种特殊的xml格式,那么您可以很容易地通过反射来实现这一点。
你可以写一个方法看起来像:
public string DumpClass(object obj) {}
在您的方法中,只需获取对象的类型,然后递归地遍历其属性。
或者您可以使用XmlSerializer,它不会是相同的格式,但它会将您的类序列化为可读性很强的xml。(这里有一个例子:http://www.jonasjohn.de/snippets/csharp/xmlserializer-example.htm)
要转储类,我认为使用真正的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>
我建议使用XElement将该文件创建为XML,然后将字符串保存到文本文件中。只需将空字符串""
放在每个标记的变量所在的位置。您还可以使用xml序列化并将其写入文件。
试试这个:
[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();