1

有没有办法转储 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>

谢谢

4

4 回答 4

1

如果你需要这种特殊的 xml 格式,那么你可以很容易地通过反射来实现。

您可以编写如下所示的方法:

public string DumpClass(object obj) {}

在您的方法中,只需获取对象的类型,然后递归地遍历其属性。

或者您可以使用 XmlSerializer,它不会是相同的格式,但它会将您的类序列化为可读性很强的 xml。(你有一个例子:http: //www.jonasjohn.de/snippets/csharp/xmlserializer-example.htm

于 2013-08-20T15:57:04.607 回答
0

Try this:

[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; }
}

To Serialize:

Person person = new Person();
XmlSerializer serializer = new XmlSerializer(typeof(Person));

StreamWriter writer = new StreamWriter(file_path);
serializer.Serialize(writer, person);
writer.Close();

To Deserialize:

XmlSerializer serializer = new XmlSerializer(typeof(Person));

StreamReader reader = new StreamReader(file_path);
Person person = (Person)serializer.Deserialize(reader);
reader.Close();
于 2013-08-20T16:01:02.503 回答
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>
于 2013-08-20T16:05:33.327 回答
0

我建议使用XElement将此文件创建为 XML,然后将字符串保存到文本文件中。只需将空字符串""放在每个标签的变量位置即可。您还可以使用xml 序列化并将其写入文件。

于 2013-08-20T15:58:57.187 回答