如果我有一个标记为a的类DataContract和一些标记有DataMember属性的属性,我可以轻松地将其序列化为XML,但它会创建如下的输出:
<Person>
<Name>John Smith</Name>
<Email>john.smith@acme.com</Email>
<Phone>123-123-1234</Phone>
</Person>
Run Code Online (Sandbox Code Playgroud)
我更喜欢的是属性,比如......
<Person Name="John Smith" Email="john.smith@acme.com" Phone="123-123-1234" />
Run Code Online (Sandbox Code Playgroud)
该DataMember属性允许我控制名称和顺序,但不能控制它是否被序列化为元素或属性.我环顾四周找到了DataContractFormat,IXmlSerializable但我希望有更简单的解决方案.
最简单的方法是什么?
在WebAPI控制器中返回对象列表时,我一直在努力输出自定义的根xml元素.
我的控制器方法看起来像这样:
public List<Product> Get()
{
return repository.GetProducts();
}
Run Code Online (Sandbox Code Playgroud)
它呈现像这样的xml输出:
<ArrayOfProduct>
<Product>
<Name>Product1</Name>
</Product>
<Product>
<Name>Product2</Name>
</Product>
</ArrayOfProduct>
Run Code Online (Sandbox Code Playgroud)
我想改变<ArrayOfProduct>,<Products>但没有找到这样做的方法.
我尝试了不同的属性DataContract和DataMember属性无济于事.
有没有人知道是否有办法做我想做的事情,没有把我的List<Product>对象包装在一个新的类中而是返回它?
c# asp.net xml-serialization netdatacontractserializer asp.net-web-api
这是一个代码示例:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
...
static void Main()
{
Person[] persons = new Person[]
{
new Person{ FirstName = "John", LastName = "Smith"},
new Person{ FirstName = "Mark", LastName = "Jones"},
new Person{ FirstName= "Alex", LastName="Hackman"}
};
XmlSerializer xs = new XmlSerializer(typeof(Person[]), "");
using (FileStream stream = File.Create("persons-" + Guid.NewGuid().ToString().Substring(0, 4) + ".xml"))
{
xs.Serialize(stream, persons);
}
}
Run Code Online (Sandbox Code Playgroud)
这是输出:
<?xml version="1.0"?>
<ArrayOfPerson xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> …Run Code Online (Sandbox Code Playgroud)