【问题标题】:Removing the namespace( xsd ,xs1 and <?xml version="1.0"?> ) in xml serialization c#在 xml 序列化 c# 中删除命名空间( xsd ,xs1 和 <?xml version="1.0"?> )
【发布时间】:2014-05-23 04:31:16
【问题描述】:

我有两个课程 Room 和 CHILD_RATE 课程: 当我序列化数据时,我得到下面提到的 xml(Sample 1:): 但我希望删除命名空间(xsd、xs1 和)。即我想要示例 2 中的输出:格式

[XmlRoot]


 public class Room
    {
        [XmlElement]
        public int Occupancy { get; set; }
        [XmlElement]
        public int Quantity { get; set; }
        [XmlArray(ElementName="CHILDREN")]
        public List<CHILD_RATE> Childs { get; set; }
    }


    public class CHILD_RATE
    {
        [XmlAttribute]
        public int CHILD_AGE { get; set; }
        [XmlAttribute]
        public int CHILD_QUANTITY { get; set; }
    }

Sample 1:


 <?xml version="1.0"?>
<ArrayOfRoom xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Room>
    <Occupancy>7</Occupancy>
    <Quantity>3</Quantity>
    <CHILDREN>
      <CHILD_RATE CHILD_AGE="1" CHILD_QUANTITY="2" />
      <CHILD_RATE CHILD_AGE="4" CHILD_QUANTITY="1" />
    </CHILDREN>
  </Room>
  <Room>
    <Occupancy>8</Occupancy>
    <Quantity>3</Quantity>
    <CHILDREN>
      <CHILD_RATE CHILD_AGE="3" CHILD_QUANTITY="3" />
      <CHILD_RATE CHILD_AGE="7" CHILD_QUANTITY="2" />
    </CHILDREN>
  </Room>
  <Room>
    <Occupancy>2</Occupancy>
    <Quantity>1</Quantity>
    <CHILDREN />
  </Room>
  <Room>
    <Occupancy>5</Occupancy>
    <Quantity>1</Quantity>
    <CHILDREN />
  </Room>
</ArrayOfRoom>

我想要像这样的输出:

示例 2:

 <Room>
    <Occupancy>7</Occupancy>
    <Quantity>3</Quantity>
    <CHILDREN>
      <CHILD_RATE CHILD_AGE="1" CHILD_QUANTITY="2" />
      <CHILD_RATE CHILD_AGE="4" CHILD_QUANTITY="1" />
    </CHILDREN>
  </Room>
  <Room>
    <Occupancy>8</Occupancy>
    <Quantity>3</Quantity>
    <CHILDREN>
      <CHILD_RATE CHILD_AGE="3" CHILD_QUANTITY="3" />
      <CHILD_RATE CHILD_AGE="7" CHILD_QUANTITY="2" />
    </CHILDREN>
  </Room>
  <Room>
    <Occupancy>2</Occupancy>
    <Quantity>1</Quantity>
    <CHILDREN />
  </Room>
  <Room>
    <Occupancy>5</Occupancy>
    <Quantity>1</Quantity>
    <CHILDREN />
  </Room>

对于我正在使用的序列化:

public string CreaateXML(List<Room> room)
    {
        XmlSerializer serializer = new XmlSerializer(typeof(List<Room>));
        MemoryStream stream = new MemoryStream();
        serializer.Serialize(stream, room);
        return Encoding.UTF8.GetString(stream.ToArray());

    }

也就是说,我不想要

 <?xml version="1.0"?>
 <ArrayOfRoom xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org /2001/XMLSchema-instance">

提前致谢。

【问题讨论】:

    标签: c# xml serialization


    【解决方案1】:

    您可以创建一个空的命名空间。根据你的代码修改

    public string CreaateXML(List<Room> room)
    {
            var xmlnamespace = new Original.XmlSerializerNamespaces();
            xmlnamespace.Add(string.Empty, string.Empty);
    
            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Indent = true;
            settings.OmitXmlDeclaration = omitDeclaration;
            settings.Encoding = encoding;
            XmlWriter writer = XmlWriter.Create(ms, settings);
    
    
            XmlSerializer serializer = new XmlSerializer(typeof(List<Room>));
            MemoryStream stream = new MemoryStream();
            serializer.Serialize(writer, room, xmlnamespace);
            return Encoding.UTF8.GetString(stream.ToArray());
    
    }
    

    【讨论】:

    • 嗨@James:谢谢,命名空间已被删除。但我仍然得到, ,我不需要。请建议
    • @palakmehta 我已经更新了我的答案,所以你可以试试
    【解决方案2】:
     XmlWriterSettings settings = new XmlWriterSettings();
                settings.OmitXmlDeclaration = true;
    
                MemoryStream ms = new MemoryStream();
                XmlWriter writer = XmlWriter.Create(ms, settings);
    
                XmlSerializerNamespaces names = new XmlSerializerNamespaces();
                names.Add("", "");
    
                XmlSerializer cs = new XmlSerializer(typeof(List<Room>));
    
                cs.Serialize(writer, room, names);
    
                ms.Flush();
                ms.Seek(0, SeekOrigin.Begin);
                StreamReader sr = new StreamReader(ms);
                var xml = sr.ReadToEnd();
                return xml;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-26
      • 1970-01-01
      • 2012-06-17
      • 2015-07-15
      • 1970-01-01
      相关资源
      最近更新 更多