【问题标题】:XmlElement Attribute being ignored by Microsoft.AspNet.Mvc.Formatters.XmlMicrosoft.AspNet.Mvc.Formatters.Xml 忽略 XmlElement 属性
【发布时间】:2016-03-28 18:45:06
【问题描述】:

我在 asp.net 5 控制器中以 xml 形式返回一个对象。该对象具有一个列表属性,我需要序列化程序忽略列表的根元素。我遵循了这篇文章的建议Use XML serialization to serialize a collection without the parent node,但由于某种原因它不起作用,如果我尝试使用 [XmlElement("newName")] 更改它的名称,它甚至会忽略它

任何线索为什么它可能会这样做?

public partial class Doc {

    [XmlElement("Detalle")]
    public List<DefTypeDetalle> Detalle { get; set; }

}

public partial class DefTypeDetalle {

    public Id { get; set; }
}

我得到的输出

<Doc>
    <Detalle>
        <DefTypeDetalle>
            <Id>1<Id/>
        </DefTypeDetalle>
        <DefTypeDetalle>
            <Id>2<Id/>
        </DefTypeDetalle>
    </Detalle>
</Doc>

而我想要的是

<Doc>   
    <Detalle>
        <Id>1<Id/>
    </Detalle>
    <Detalle>
        <Id>2<Id/>
    </Detalle>  
</Doc>

谢谢

【问题讨论】:

  • 我可以看到有问题的代码吗?
  • 好的,我也添加了代码和xml

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


【解决方案1】:

所以问题是我在 Startup.cs 中使用的格式化程序

 mvcBuilder.AddXmlDataContractSerializerFormatters();

并且需要使用 xml 序列化程序

mvcBuilder.AddXmlSerializerFormatters();

【讨论】:

    【解决方案2】:

    这可能是您序列化数据的方式。试试看

    XmlSerializer serializer = new XmlSerializer(typeof(List<DefTypeDetalle>));
        using ( TextWriter writer = new StreamWriter( @"your_directory")
        {
            serializer.Serialize(writer, your_list) 
        }  
    

    【讨论】:

    • 这是一个 MVC 项目所以我没有手动序列化,控制器输出 xml 因为我在请求的标头中要求它
    • 如果只使用 [XmlElement] 而不使用名称规范,结果会有所不同吗?如果从 List 更改为数组会发生什么?
    • 没有属性的输出是一样的,我之前把它作为一个数组:(
    • 使用您的实体数据的输出流服务可能不知道 XmlElementAttribute 类型。是否可以开发替代实现?
    • 我想,我的目标是拥有干净的控制器,但我可能必须扩展序列化程序
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    • 2023-03-19
    相关资源
    最近更新 更多