使用具有未知根元素的 XmlSerializer
using XmlSerializer with unknown root element
我有一些 XML 文件如下所示:
文件“B156.xml”
<B156>
<Customer>
<Name>The Barn</Name>
<Phone>0427825166</Phone>
</Customer>
<Orders>
<Item>
<Description>Black toner</Description>
<Amount>.00</Amount>
</Item>
<Orders>
</B156>
文件“B172.xml”
<B172>
<Customer>
<Name>Pixie Inc</Name>
<Phone>0426553190</Phone>
</Customer>
<Orders>
<Item>
<Description>Colour toner</Description>
<Amount>.00</Amount>
</Item>
<Orders>
</B172>
考虑到根元素是动态的并且我们不能使用 XmlRoot("RootName") 来指定它,在这种情况下如何使用 XmlSerializer?
你可以试试这个,
CLASS 对象
[XmlRoot("root")]
public class CustomerOrder
{
public Customer Customer { get; set; }
[XmlArray("Orders")]
[XmlArrayItem("Item")]
public List<Order> Orders { get; set; }
}
public class Customer
{
public string Name { get; set; }
public string Phone { get; set; }
}
public class Order
{
public string Description { get; set; }
public string Amount { get; set; }
}
更改根方法
private static XmlDocument changeRoot(XmlDocument xmlDocument)
{
var newXmlDocument = new XmlDocument();
var newRoot = newXmlDocument.CreateElement("root");
newXmlDocument.AppendChild(newRoot);
newRoot.InnerXml = xmlDocument.DocumentElement.InnerXml;
return newXmlDocument;
}
序列化
var xmlDocument = new XmlDocument();
xmlDocument.Load("XMLFile1.xml");
xmlDocument = changeRoot(xmlDocument);
XmlSerializer serializer = new XmlSerializer(typeof(CustomerOrder));
CustomerOrder result;
using (TextReader reader = new StringReader(xmlDocument.InnerXml))
{
result = (CustomerOrder)serializer.Deserialize(reader);
}
我有一些 XML 文件如下所示:
文件“B156.xml”
<B156>
<Customer>
<Name>The Barn</Name>
<Phone>0427825166</Phone>
</Customer>
<Orders>
<Item>
<Description>Black toner</Description>
<Amount>.00</Amount>
</Item>
<Orders>
</B156>
文件“B172.xml”
<B172>
<Customer>
<Name>Pixie Inc</Name>
<Phone>0426553190</Phone>
</Customer>
<Orders>
<Item>
<Description>Colour toner</Description>
<Amount>.00</Amount>
</Item>
<Orders>
</B172>
考虑到根元素是动态的并且我们不能使用 XmlRoot("RootName") 来指定它,在这种情况下如何使用 XmlSerializer?
你可以试试这个,
CLASS 对象
[XmlRoot("root")]
public class CustomerOrder
{
public Customer Customer { get; set; }
[XmlArray("Orders")]
[XmlArrayItem("Item")]
public List<Order> Orders { get; set; }
}
public class Customer
{
public string Name { get; set; }
public string Phone { get; set; }
}
public class Order
{
public string Description { get; set; }
public string Amount { get; set; }
}
更改根方法
private static XmlDocument changeRoot(XmlDocument xmlDocument)
{
var newXmlDocument = new XmlDocument();
var newRoot = newXmlDocument.CreateElement("root");
newXmlDocument.AppendChild(newRoot);
newRoot.InnerXml = xmlDocument.DocumentElement.InnerXml;
return newXmlDocument;
}
序列化
var xmlDocument = new XmlDocument();
xmlDocument.Load("XMLFile1.xml");
xmlDocument = changeRoot(xmlDocument);
XmlSerializer serializer = new XmlSerializer(typeof(CustomerOrder));
CustomerOrder result;
using (TextReader reader = new StringReader(xmlDocument.InnerXml))
{
result = (CustomerOrder)serializer.Deserialize(reader);
}