如何在 C# 中将嵌套列表转换为 XML
How to convert nested list to XML in C#
我正在使用以下方法将列表转换为 XML。我怎样才能改变它以便将嵌套列表转换为 XML.
private string ConvertProductListToXML(List<ProductDM> productDMList)
{
var xEle = new XElement("Products",
from emp in productDMList
select new XElement("Product",
new XElement("ProductID", emp.ProductID),
new XElement("Cost", emp.Cost),
new XElement("UPC", emp.UPC),
new XElement("TaxStatus", emp.TaxStatus)
));
return ConvertToInnerXML(xEle);
}
public static string ConvertToInnerXML(XElement el)
{
var reader = el.CreateReader();
reader.MoveToContent();
return reader.ReadInnerXml();
}
型号
public class ProductDM
{
public int? ProductID { get; set; }
public string UPC { get; set; }
public string TaxStatus { get; set; }
public Decimal Cost { get; set; }
}
如果数据模型看起来像下面的扩展列表,我该如何修改上面的代码。
public class ProductDM
{
public int? ProductID { get; set; }
public string UPC { get; set; }
public string TaxStatus { get; set; }
public Decimal Cost { get; set; }
public List<InventoryDM> CabinetList { get; set; }
}
public class InventoryDM
{
public int InventoryID { get; set; }
}
预期输出:
<Product><ProductID>40</ProductID><Cost>2</Cost><UPC>3121</UPC>
<TaxStatus>NO</TaxStatus><CabinetList>
<InventoryID>1</InventoryID></CabinetList><CabinetList>
<InventoryID>2</InventoryID></CabinetList></Product>
我不会使用 xElement。
最简单的解决方案是使用 xml 序列化。
您的 class 应该像这样更新
using System;
using System.Xml.Serialization;
using System.Collections.Generic;
namespace YourAppNameSpace
{
[XmlRoot(ElementName="CabinetList")]
public class InventoryDM {
[XmlElement(ElementName="InventoryID")]
public string InventoryID { get; set; }
}
[XmlRoot(ElementName="Product")]
public class Product {
[XmlElement(ElementName="ProductID")]
public int? ProductID { get; set; }
[XmlElement(ElementName="Cost")]
public Decimal Cost { get; set; }
[XmlElement(ElementName="UPC")]
public string UPC { get; set; }
[XmlElement(ElementName="TaxStatus")]
public string TaxStatus { get; set; }
[XmlElement(ElementName="CabinetList")]
public List<InventoryDM> CabinetList { get; set; }
}
}
并将 class 序列化为 xml
public static string SerializeObject(object obj)
{
System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(obj.GetType());
using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
{
serializer.Serialize(ms, obj);
ms.Position = 0;
xmlDoc.Load(ms);
return xmlDoc.InnerXml;
}
}
我正在使用以下方法将列表转换为 XML。我怎样才能改变它以便将嵌套列表转换为 XML.
private string ConvertProductListToXML(List<ProductDM> productDMList)
{
var xEle = new XElement("Products",
from emp in productDMList
select new XElement("Product",
new XElement("ProductID", emp.ProductID),
new XElement("Cost", emp.Cost),
new XElement("UPC", emp.UPC),
new XElement("TaxStatus", emp.TaxStatus)
));
return ConvertToInnerXML(xEle);
}
public static string ConvertToInnerXML(XElement el)
{
var reader = el.CreateReader();
reader.MoveToContent();
return reader.ReadInnerXml();
}
型号
public class ProductDM
{
public int? ProductID { get; set; }
public string UPC { get; set; }
public string TaxStatus { get; set; }
public Decimal Cost { get; set; }
}
如果数据模型看起来像下面的扩展列表,我该如何修改上面的代码。
public class ProductDM
{
public int? ProductID { get; set; }
public string UPC { get; set; }
public string TaxStatus { get; set; }
public Decimal Cost { get; set; }
public List<InventoryDM> CabinetList { get; set; }
}
public class InventoryDM
{
public int InventoryID { get; set; }
}
预期输出:
<Product><ProductID>40</ProductID><Cost>2</Cost><UPC>3121</UPC>
<TaxStatus>NO</TaxStatus><CabinetList>
<InventoryID>1</InventoryID></CabinetList><CabinetList>
<InventoryID>2</InventoryID></CabinetList></Product>
我不会使用 xElement。 最简单的解决方案是使用 xml 序列化。 您的 class 应该像这样更新
using System;
using System.Xml.Serialization;
using System.Collections.Generic;
namespace YourAppNameSpace
{
[XmlRoot(ElementName="CabinetList")]
public class InventoryDM {
[XmlElement(ElementName="InventoryID")]
public string InventoryID { get; set; }
}
[XmlRoot(ElementName="Product")]
public class Product {
[XmlElement(ElementName="ProductID")]
public int? ProductID { get; set; }
[XmlElement(ElementName="Cost")]
public Decimal Cost { get; set; }
[XmlElement(ElementName="UPC")]
public string UPC { get; set; }
[XmlElement(ElementName="TaxStatus")]
public string TaxStatus { get; set; }
[XmlElement(ElementName="CabinetList")]
public List<InventoryDM> CabinetList { get; set; }
}
}
并将 class 序列化为 xml
public static string SerializeObject(object obj)
{
System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(obj.GetType());
using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
{
serializer.Serialize(ms, obj);
ms.Position = 0;
xmlDoc.Load(ms);
return xmlDoc.InnerXml;
}
}