在日志文件中转储C#类

在日志文件中转储C#类,c#,.net,debugging,logging,C#,.net,Debugging,Logging,是否有方法转储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 strin

是否有方法转储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; }
}
公共类人物
{
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公共整数{get;set;}
公共列表地址{get;set;}
}
公共课堂演讲
{
公共字符串Street{get;set;}
公共整数{get;set;}
公共int Zipcode{get;set;}
公共字符串位置{get;set;}
}
我想要下面的东西。你认为有可能吗?我该怎么做? 重要的是,这是一个班级成员,这是一个例子。我希望能够使用相同的转储代码来使用我的所有类

更新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。(这里有一个例子:)

如果您需要这种特殊的xml格式,那么您可以通过反射非常容易地实现这一点

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

public string DumpClass(object obj) {}
在方法中,只需获取对象的类型,然后递归地遍历其属性

或者您可以使用XmlSerializer,它的格式不同,但它会将您的类序列化为可读性很强的xml。(这里有一个例子:)

我建议使用将此文件创建为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; }
}
要反序列化:

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

StreamReader reader = new StreamReader(file_path);
Person person = (Person)serializer.Deserialize(reader);
reader.Close();
试试这个:

[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; }
}
要反序列化:

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

StreamReader reader = new StreamReader(file_path);
Person person = (Person)serializer.Deserialize(reader);
reader.Close();

为了转储类,我认为使用真正的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类进行任何修改(不需要任何[Serializable]标记):


F
L
50
s
1.
1.
L
s2
12
12
l2

要转储类,我认为使用真正的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类进行任何修改(不需要任何[Serializable]标记):


F
L
50
s
1.
1.
L
s2
12
12
l2

当然,使用反射。然而,就目前的情况来看,你的问题似乎并没有表明你在试图自己解决这个问题上付出了太多的努力。那当然更像是使用反射。然而,就目前情况而言,你的问题似乎并没有表明你已经花了很多精力试图自己解决这个问题。这更像是@Kris-I你说的“类是不可序列化的”是什么意思?它们是由int和字符串组成的,当然是。您甚至不需要将它们标记为[Serializable()]@Kris-I“类不可序列化”是什么意思?它们是由int和字符串组成的,当然是。您甚至不需要将它们标记为[Serializable()]