【问题标题】:xml serialization in ASP.NET WEB APIASP.NET WEB API 中的 xml 序列化
【发布时间】:2017-04-03 22:41:24
【问题描述】:

我正在用 C# 开发一个 web api。 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。

任何帮助将不胜感激。

【问题讨论】:

    标签: c# asp.net asp.net-mvc serialization asp.net-web-api


    【解决方案1】:

    您可以使用 Serialize 方法从它自己的模型生成此 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; }
        }
    

    您可以使用下面的示例

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

    【讨论】:

    • 非常感谢!这有帮助。但是为了管理 personData 的多个元素,然后管理 affdatalist 的 i personData 的多个元素,我在每个类中添加了 List,然后将在循环中创建的对象保存在列表中。
    【解决方案2】:

    如果你想要这样的 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; }
        }
    

    如果你序列化 List,下面的 xml 将起作用

    <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>
    

    【讨论】:

    • 问题是我不想拥有像 这样的额外元素。我需要完全按照我的问题中提到的结构来拥有它。
    【解决方案3】:

    这是我使用 Sulay Shah 所说的话后的示例:

    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>
    

    【讨论】:

      猜你喜欢
      • 2012-08-29
      • 1970-01-01
      • 2013-09-25
      • 2016-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多