【问题标题】:How to produce XML with attributes rather than nodes, using MvcContrib's XmlResult?如何使用 MvcContrib 的 XmlResult 生成带有属性而不是节点的 XML?
【发布时间】:2011-02-22 11:09:35
【问题描述】:

我正在尝试从 C# 中的类型生成 XML 输出。我正在使用 MvcContrib XmlResult 类,我在下面提供了一个链接。

作为一个简单的测试,看看我是否可以让它工作,我正在使用以下代码:

var topTen = new TopTen
{
    PerformanceTo = DateTime.Now,
    ShareClasses = new List<TopTenShareClass>()
                        {
                            new TopTenShareClass{Id = 1, Name = "a"},
                            new TopTenShareClass{Id = 2, Name = "b"},
                            new TopTenShareClass{Id = 3, Name = "c"}

                        }
};

return new XmlResult(topTen);

(其中 2 种类型定义为:)

public class TopTen
{
    public DateTime PerformanceTo { get; set; }
    public List<TopTenShareClass> ShareClasses { get; set; }
}

public class TopTenShareClass
{
    public int Id { get; set; }
    public string Name { get; set; }
}

生成此输出 XML

<?xml version="1.0" encoding="utf-8"?>
<TopTen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <PerformanceTo>2011-02-22T10:56:41.3094548+00:00</PerformanceTo>
  <ShareClasses>
    <TopTenShareClass>
      <Id>1</Id>
      <Name>a</Name>
    </TopTenShareClass>
    <TopTenShareClass>
      <Id>2</Id>
      <Name>b</Name>
    </TopTenShareClass>
    <TopTenShareClass>
      <Id>3</Id>
      <Name>c</Name>
    </TopTenShareClass>
  </ShareClasses>
</TopTen>

我想知道是否可以让 ID 和名称标签显示为 TopTenShareClass 节点中的属性,而不是节点本身?理想情况下,XML 应该是:

<?xml version="1.0" encoding="utf-8"?>
<TopTen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <PerformanceTo>2011-02-22T10:56:41.3094548+00:00</PerformanceTo>
  <ShareClasses>
    <TopTenShareClass Id=1 Name='a'></TopTenShareClass>
    <TopTenShareClass Id=2 Name='b'></TopTenShareClass>
    <TopTenShareClass Id=3 Name='c'></TopTenShareClass>
  </ShareClasses>
</TopTen>

作为参考,XmlResult 定义可在此处获得:http://mvccontrib.codeplex.com/SourceControl/changeset/view/5f542a2e51e9#src%2fMVCContrib%2fActionResults%2fXmlResult.cs

【问题讨论】:

    标签: c# asp.net-mvc xml xml-serialization mvccontrib


    【解决方案1】:

    我猜它只是使用XmlSerializer 来实现,所以:

    public class TopTenShareClass
    {
        [XmlAttribute]
        public int Id { get; set; }
        [XmlAttribute]
        public string Name { get; set; }
    }
    

    完整列表在 MSDN 上:Attributes That Control XML Serialization

    你的例子,我实际上期望:

    <TopTenShareClass Id="1" Name="a"/>
    <TopTenShareClass Id="2" Name="b"/>
    <TopTenShareClass Id="3" Name="c"/>
    

    【讨论】:

      【解决方案2】:

      您可以控制XML序列化过程using attributes

      public class TopTenShareClass
      {
          [XmlAttribute]
          public int Id { get; set; }
      
          [XmlAttribute]
          public string Name { get; set; }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-10
        • 2022-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-18
        • 2015-05-14
        • 1970-01-01
        相关资源
        最近更新 更多