3

我有一些课,狐狸的例子

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”的对象,但它会改变类的结构

4

2 回答 2

2

要做到这一点XmlSerializer,你需要有第二种类型的[XmlAttribute]an [XmlText]。唯一的另一个选择是IXmlSerializable,即:工作量大,容易出错。

选项:

  • 改变结构SomeProperty
  • 与-并行添加shim属性并标记为SomePropertySomeProperty[XmlIgnore]
  • 使用完全独立的 DTO 模型进行序列化(当序列化不完全适合时,始终是我的首选)
  • 使用IXmlSerializable(哎哟)
  • 根本不使用XmlSerializer(例如,查看 LINQ-to-XML 或 DOM)
  • 使用XmlSerializer,但之后编辑 xml(例如通过 DOM 或 xslt)
于 2013-08-30T09:09:30.193 回答
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>
于 2013-08-30T09:13:45.147 回答