将xml属性添加到属性

时间:2013-08-30 08:53:53

标签: c# .net xml c#-4.0 xml-serialization

我有一些课,狐狸的例子

public class Test
{
    [XmlElement(IsNullable = true)]
    public string SomeProperty{get;set;}
}

当我序列化这个类的对象时,我得到了

    <test>
        <SomeProperty>value<someproperty>
    <test>

但我需要将属性添加到SomeProperty 而不更改类的结构并获取此

    <test>
      <SomeProperty Search="true">value<someproperty>
    <test>

我该怎么做?

PS:我知道,我可以编写包含“SomeProperty”和Bool属性“Search”的对象,但它会改变类的结构

2 个答案:

答案 0 :(得分:2)

要使用XmlSerializer执行此操作,您需要使用[XmlAttribute][XmlText]的第二种类型。唯一的另一个选择是IXmlSerializable,这是:很多工作,很容易出错。

选项:

  • 更改SomeProperty
  • 的结构
  • SomeProperty并行添加 shim 属性 - 并将SomeProperty标记为[XmlIgnore]
  • 使用完全独立的DTO模型进行序列化(当序列化不完全适合时,总是我的首选选项)
  • 使用IXmlSerializable(哎哟)
  • 根本不使用XmlSerializer(例如,查看LINQ-to-XML或DOM)
  • 使用XmlSerializer,但之后编辑xml(例如通过DOM或xslt)

答案 1 :(得分:0)

以下类结构将生成给定的xml

[XmlRoot("test")]
public class Test {
    [XmlElement("items")]
    public MyListWrapper Items {get;set;}
}

public class MyListWrapper {
    [XmlAttribute("Search")]
    public string Attribute1 {get;set;}
    [XmlElement("item")]
    public List<MyItem> Items {get;set;}
}
public class MyItem {
    [XmlAttribute("id")]
    public int Id {get;set;}
}

,xml将是

<?xml version="1.0" ?>
<test>
   <items search="hello">
      <item id="1" />
      <item id="2" />
      <item id="3" />
   </items>
</test>