我正在使用Visual Studio 2013.我创建了一个ASP.Net Web API项目,并添加了一个控制器,模型和其他相关类。请在下面找到我的课程详情
产品类
public partial class Products{
[XmlArray("Product")] // Tried this also XmlArray(ElementName = "Product")
[XmlArrayItem("productName")]
public List<string> productName { get; set; }
}
在其他课程中,我正在初始化Products类对象,如下所述
public Products Get()
{
Products objProducts = new Products
{
productName = new List<string>
{
"P1",
"P2",
"P3"
};
};
return objProducts;
}
每当我在浏览器上执行url (http://localhost/service/api/Products)
时,我就得到了XML
<Products>
<Product>
<string>P1</string>
<string>P2</string>
<string>P3</string>
</Product>
</Products>
如果我能得到这个,我应该喜欢它:
<Products>
<Product>
<productName>P1</productName>
<productName>P2</productName>
<productName>P3</productName>
</Product>
<Products>
答案 0 :(得分:1)
问题在于两个嵌套标签 - POC中没有任何类似于该层次结构的内容。如果你重新组织你的POC课程,你可以逃脱。
web api序列化输出到xml的方式有两种。请参阅https://www.asp.net/web-api/overview/formats-and-model-binding/json-and-xml-serialization以供参考。
一个使用DataContractSerializer
(默认),另一个使用XmlSerializer
// configure web api to use XmlSerializer
var xml = GlobalConfiguration.Configuration.Formatters.XmlFormatter;
xml.UseXmlSerializer = true;
现在,如果你正在使用XmlSerializer
:
public class Products
{
[XmlElement("Product")]
public ProductNameList Product { get; set; }
}
public class ProductNameList
{
[XmlElement("productName")]
public List<string> ProductName { get; set; }
}
用法:
var serializer = new XmlSerializer(typeof(Products));
var stream = new MemoryStream();
serializer.Serialize(stream, new Products
{
Product = new ProductNameList { ProductName = new List<string> { "aa", "bb" } }
});
var result = Encoding.ASCII.GetString(stream.ToArray());
转储:
<?xml version="1.0"?>
<Products xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Product>
<productName>aa</productName>
<productName>bb</productName>
</Product>
</Products>
如果您正在使用DataContractSerializer
:
public class Products
{
public ProductNameList Product { get; set; }
}
[CollectionDataContract(ItemName = "productName")]
public class ProductNameList : List<string>
{
}
请注意,当您使用[Xml...]
时,所有DataContractSerializer
属性都会被忽略 - 您的示例正在使用它们,因此我假设您使用XmlSerializer
。
答案 1 :(得分:0)
尝试使用[XmlElement("productName")]
public partial class Products{
[XmlArray("Product")]
[XmlElement("productName")]
public List<string> productName { get; set; }
}