2017-04-03 87 views
0

我在C#中开发web api。该网页API应返回的XML,如:在ASP.NET Web API中的xml序列化

<personDatas> 
<personData> 
    <affdatalist> 
    <object1> information </object1> 
    <object2> information </object2> 
    <object3> information </object3> 
    </affdatalist> 
    <anotherObject1> infooo </anotherObject1> 
    <anotherObject2> infooo </anotherObject2> 
</personData> 
</personDatas> 

的XML可以有1到许多personData元素和personData元素可以有1到许多affdatalist元素。

使用C#6在web api中生成这种XML的最佳实践是什么?

我试着用基于模式定义的XSD。

任何帮助将不胜感激。

回答

0

可以使用序列化的方法来从模型中生成它自己这个XML如下XML将工作。

public string SerializeXml<T>(T config) 
     { 
      XmlSerializer xsSubmit = new XmlSerializer(typeof(T)); 
      string xml = ""; 
      XmlWriterSettings settings = new XmlWriterSettings(); 
      settings.OmitXmlDeclaration = false; 

      using (var sww = new StringWriter()) 
      { 
       using (XmlWriter writer = XmlWriter.Create(sww, settings)) 
       { 
        xsSubmit.Serialize(writer, config); 
        xml = sww.ToString(); 
       } 
      } 

      return xml; 
     } 

这将返回XML字符串,您需要与您所需的XML类似的模型。 这是我从XML创建的模型,可以根据您的需求进行更改。

[XmlRoot(ElementName = "affdatalist")] 
    public class Affdatalist 
    { 
     [XmlElement(ElementName = "object1")] 
     public string Object1 { get; set; } 
     [XmlElement(ElementName = "object2")] 
     public string Object2 { get; set; } 
     [XmlElement(ElementName = "object3")] 
     public string Object3 { get; set; } 
    } 

    [XmlRoot(ElementName = "personData")] 
    public class PersonData 
    { 
     [XmlElement(ElementName = "affdatalist")] 
     public Affdatalist Affdatalist { get; set; } 
     [XmlElement(ElementName = "anotherObject1")] 
     public string AnotherObject1 { get; set; } 
     [XmlElement(ElementName = "anotherObject2")] 
     public string AnotherObject2 { get; set; } 
    } 

    [XmlRoot(ElementName = "personDatas")] 
    public class PersonDatas 
    { 
     [XmlElement(ElementName = "personData")] 
     public PersonData PersonData { get; set; } 
    } 

可以使用什么Sulay Shah表示后作为样品使用下面

PersonDatas data = new PersonDatas(); 
var xml = this.SerializeXml<PersonDatas>(data); // your model with data 
+0

非常感谢!这有所帮助。但为了管理personData中的多个元素,然后我将persondata的多个元素添加到每个类中,然后将列表中创建的对象保存在列表中。 –

0

如果你想C#类这样

using System; 
using System.Xml.Serialization; 
using System.Collections.Generic; 
namespace namespace 
{ 

    public class AffData { 

     public string Property1 { get; set; } 
    } 




    public class AnotherObject1 { 

     public string Property1 { get; set; } 
    } 


    public class AnotherObject2 { 

     public string Property1 { get; set; } 
    } 


    public class PersonData { 

     public List<AffData> AffDataList { get; set; } 

     public AnotherObject1 AnotherObject1 { get; set; } 

     public AnotherObject2 AnotherObject2 { get; set; } 
    } 

如果你序列名单

<ArrayOfPersonData> 
<PersonData> 
    <ArrayOfAffData> 
    <AffData> 
<Property1>info</Property1> 
</AffData> 
    <AffData> <Property1>info</Property1></AffData> 
    <AffData> <Property1>info</Property1> </AffData> 
    </ArrayOfAffData> 
    <anotherObject1> <Property1>info</Property1> </anotherObject1> 
    <anotherObject2> <Property1>info</Property1> </anotherObject2> 
</PersonData> 
</ArrayOfPersonData> 
+0

问题产生的是我不想要多余的元素像 ..我需要完全按照我的问题中提到的结构。 –

0

这是我的示例:

PersonDatas data = new PersonDatas(); 
      for (int x = 0; x < 2; x++) 
      { 

       data.PersonData = new PersonData(); 
       for (int i = 0; i < 2; i++) 
       { 
        Affdatalist affdata = new Affdatalist(); 
        affdata.Object1 = "LALALALALLALA"; 
        affdata.Object2 = "lqlqlqlqlqlqlql"; 
        affdata.Object3 = "ililililililililililil"; 
        data.PersonData.Affdatalist.Add(affdata); 
       } 

       data.PersonData.AnotherObject1 = "ali"; 
       data.PersonData.AnotherObject2 = "Nazar"; 

       data.personDataList.Add(data.PersonData); 
      } 
      var xml = this.SerializeXml<PersonDatas>(data); 

      return xml; 

以上低于

xml:<?xml version="1.0" encoding="utf-16"?> 
<personDatas xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <personData> 
     <affdatalist> 
      <object1>LALALALALLALA</object1> 
      <object2>lqlqlqlqlqlqlql</object2> 
      <object3>ililililililililililil</object3> 
     </affdatalist> 
     <affdatalist> 
      <object1>LALALALALLALA</object1> 
      <object2>lqlqlqlqlqlqlql</object2> 
      <object3>ililililililililililil</object3> 
     </affdatalist> 
     <anotherObject1>ali</anotherObject1> 
     <anotherObject2>Nazar</anotherObject2> 
    </personData> 
    <personData> 
     <affdatalist> 
      <object1>LALALALALLALA</object1> 
      <object2>lqlqlqlqlqlqlql</object2> 
      <object3>ililililililililililil</object3> 
     </affdatalist> 
     <affdatalist> 
      <object1>LALALALALLALA</object1> 
      <object2>lqlqlqlqlqlqlql</object2> 
      <object3>ililililililililililil</object3> 
     </affdatalist> 
     <anotherObject1>ali</anotherObject1> 
     <anotherObject2>Nazar</anotherObject2> 
    </personData> 
    <PersonData> 
     <affdatalist> 
      <object1>LALALALALLALA</object1> 
      <object2>lqlqlqlqlqlqlql</object2> 
      <object3>ililililililililililil</object3> 
     </affdatalist> 
     <affdatalist> 
      <object1>LALALALALLALA</object1> 
      <object2>lqlqlqlqlqlqlql</object2> 
      <object3>ililililililililililil</object3> 
     </affdatalist> 
     <anotherObject1>ali</anotherObject1> 
     <anotherObject2>Nazar</anotherObject2> 
    </PersonData> 
</personDatas>