c# xml 显示反向对象图的序列化
c# xml serialization showing reversed object graph
我是 C# 新手,想将对象图序列化为 XML。
我快完成了,但由于未知原因,XML 向我展示了颠倒的对象图。
public class PersonalDetails
{
public string Name { get; set; }
public int Age { get; set; }
public AddressDetails address;
public PersonalDetails()
{
}
public PersonalDetails(string Name, int Age, AddressDetails address)
{
this.Name = Name;
this.Age = Age;
this.address = address;
}
public class AddressDetails
{
[XmlElement("Number")]
public int HouseNo;
[XmlElement("Street")]
public string StreetName;
public string City;
public AddressDetails()
{
}
static void Main(string[] args)
{
AddressDetails address = new AddressDetails();
PersonalDetails[] personal = new PersonalDetails[1];
personal[0] = new PersonalDetails("Roberto", 15, address);
address.HouseNo = 4;
address.StreetName = "ABC";
address.City = "Delhi";
Serialize(personal[0]);
}
public static void Serialize(PersonalDetails personal)
{
XmlSerializer serializer = new XmlSerializer(typeof(PersonalDetails));
using (TextWriter writer = new StreamWriter("TestXML.xml"))
{
serializer.Serialize(writer, personal);
}
}
}
}
这就是我当前 XML 的样子:
<PersonalDetails xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<address>
<Number>4</Number>
<Street>ABC</Street>
<City>Delhi</City>
</address>
<Name>Roberto</Name>
<Age>15</Age>
</PersonalDetails>
但我想要这个:
<PersonalDetails xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Name>Roberto</Name>
<Age>15</Age>
<address>
<Number>4</Number>
<Street>ABC</Street>
<City>Delhi</City>
</address>
</PersonalDetails>
元素顺序通常在序列化中并不重要,但是据说您可以使用 XmlElement
属性(您已经在使用它来指定名称)。如果您真的希望它以特定方式订购,您可以在您的字段上使用 XmlElement
属性的 Order
属性:
public class PersonalDetails
{
[XmlElement(Order = 1)]
public string Name { get; set; }
[XmlElement(Order = 2)]
public int Age { get; set; }
[XmlElement(Order = 3)]
public AddressDetails address;
public PersonalDetails()
{
}
public PersonalDetails(string Name, int Age, AddressDetails address)
{
this.Name = Name;
this.Age = Age;
this.address = address;
}
public class AddressDetails
{
[XmlElement(ElementName = "Number", Order = 1)]
public int HouseNo;
[XmlElement(ElementName = "Street", Order = 2)]
public string StreetName;
[XmlElement(Order = 3)]
public string City;
public AddressDetails()
{
}
static void Main(string[] args)
{
AddressDetails address = new AddressDetails();
PersonalDetails[] personal = new PersonalDetails[1];
personal[0] = new PersonalDetails("Roberto", 15, address);
address.HouseNo = 4;
address.StreetName = "ABC";
address.City = "Delhi";
Serialize(personal[0]);
}
public static void Serialize(PersonalDetails personal)
{
XmlSerializer serializer = new XmlSerializer(typeof(PersonalDetails));
using (TextWriter writer = new StreamWriter("TestXML.xml"))
{
serializer.Serialize(writer, personal);
}
}
}
}
您正在混合使用 public 个字段和 public 个属性。 XmlSerializer 优先考虑字段。这就是为什么您会遇到看似违反直觉的元素顺序。
坚持使用 public 属性 仅 ,顺序将如您所愿。无需指定明确的顺序。
我是 C# 新手,想将对象图序列化为 XML。 我快完成了,但由于未知原因,XML 向我展示了颠倒的对象图。
public class PersonalDetails
{
public string Name { get; set; }
public int Age { get; set; }
public AddressDetails address;
public PersonalDetails()
{
}
public PersonalDetails(string Name, int Age, AddressDetails address)
{
this.Name = Name;
this.Age = Age;
this.address = address;
}
public class AddressDetails
{
[XmlElement("Number")]
public int HouseNo;
[XmlElement("Street")]
public string StreetName;
public string City;
public AddressDetails()
{
}
static void Main(string[] args)
{
AddressDetails address = new AddressDetails();
PersonalDetails[] personal = new PersonalDetails[1];
personal[0] = new PersonalDetails("Roberto", 15, address);
address.HouseNo = 4;
address.StreetName = "ABC";
address.City = "Delhi";
Serialize(personal[0]);
}
public static void Serialize(PersonalDetails personal)
{
XmlSerializer serializer = new XmlSerializer(typeof(PersonalDetails));
using (TextWriter writer = new StreamWriter("TestXML.xml"))
{
serializer.Serialize(writer, personal);
}
}
}
}
这就是我当前 XML 的样子:
<PersonalDetails xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<address>
<Number>4</Number>
<Street>ABC</Street>
<City>Delhi</City>
</address>
<Name>Roberto</Name>
<Age>15</Age>
</PersonalDetails>
但我想要这个:
<PersonalDetails xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Name>Roberto</Name>
<Age>15</Age>
<address>
<Number>4</Number>
<Street>ABC</Street>
<City>Delhi</City>
</address>
</PersonalDetails>
元素顺序通常在序列化中并不重要,但是据说您可以使用 XmlElement
属性(您已经在使用它来指定名称)。如果您真的希望它以特定方式订购,您可以在您的字段上使用 XmlElement
属性的 Order
属性:
public class PersonalDetails
{
[XmlElement(Order = 1)]
public string Name { get; set; }
[XmlElement(Order = 2)]
public int Age { get; set; }
[XmlElement(Order = 3)]
public AddressDetails address;
public PersonalDetails()
{
}
public PersonalDetails(string Name, int Age, AddressDetails address)
{
this.Name = Name;
this.Age = Age;
this.address = address;
}
public class AddressDetails
{
[XmlElement(ElementName = "Number", Order = 1)]
public int HouseNo;
[XmlElement(ElementName = "Street", Order = 2)]
public string StreetName;
[XmlElement(Order = 3)]
public string City;
public AddressDetails()
{
}
static void Main(string[] args)
{
AddressDetails address = new AddressDetails();
PersonalDetails[] personal = new PersonalDetails[1];
personal[0] = new PersonalDetails("Roberto", 15, address);
address.HouseNo = 4;
address.StreetName = "ABC";
address.City = "Delhi";
Serialize(personal[0]);
}
public static void Serialize(PersonalDetails personal)
{
XmlSerializer serializer = new XmlSerializer(typeof(PersonalDetails));
using (TextWriter writer = new StreamWriter("TestXML.xml"))
{
serializer.Serialize(writer, personal);
}
}
}
}
您正在混合使用 public 个字段和 public 个属性。 XmlSerializer 优先考虑字段。这就是为什么您会遇到看似违反直觉的元素顺序。
坚持使用 public 属性 仅 ,顺序将如您所愿。无需指定明确的顺序。