2017-04-03 55 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>