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

でそれを行うには、 anXmlSerializerを持つ 2 番目の型が必要です。他の唯一のオプションは です。これは、多くの作業が必要で、間違いやすいものです。[XmlAttribute][XmlText]IXmlSerializable

オプション:

  • の構造を変えるSomeProperty
  • - と並行してシムプロパティを追加し、次のようにマークします。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 に答える