4

XmlSerializerクラスを使用してXMLにシリアル化するように設定したC#の単純なクラスがあります。

[Serializable, XmlRoot("dc", Namespace= dc.NS_DC)]
public class DCItem {

    // books??

    [XmlElement("title")]
    public string Title { get; set; }

}

DCItemは、コードが現在セットアップされているため(上​​記のように)、優れたシリアル化を実現します。ただし、プロパティ「Title」を「Books」ノードに含まれるように変更したいと思います。例えば:

<dc>
  <books>
    <title>Joe's Place</title>
  </books>
</dc>

これを行うための最良の方法は何ですか?

4

3 に答える 3

5

Booksクラスを定義できます。

public class Books
{
    [XmlElement("title")]
    public string Title { get; set; }
}

その後:

[XmlRoot("dc", Namespace= dc.NS_DC)]
public class DCItem 
{
    [XmlElement("books")]
    public Books Books { get; set; }
}

また、バイナリシリアライザーによって使用され、XmlSerializerクラスによって完全に無視されるSerializable属性を削除したことにも注意してください。

今、私はあなたが複数の本を持っている可能性があると思うので:

<dc>
  <books>
    <title>Joe's Place</title>
    <title>second book</title>
    <title>third book</title>
  </books>
</dc>

この構造に一致するようにオブジェクトモデルを適合させることができます。

[XmlRoot("dc", Namespace= dc.NS_DC)]
public class DCItem
{
    [XmlElement("books")]
    public Books Books { get; set; }
}

public class Books
{
    [XmlElement("title")]
    public Book[] Items { get; set; }
}

public class Book
{
    [XmlText]
    public string Title { get; set; }
}
于 2013-01-15T21:58:19.420 に答える
3

私はあなたが<title>下にいくつか欲しいと思っています<books>。次に、これはそれを行う1つの方法です。

[XmlType("title")]
public class Title 
{
    [XmlText]
    public string Text { get; set; }
}

[XmlRoot("dc")]
public class DCItem 
{
    [XmlArray("books")]
    public List<Title> Books { get; set; }
}

<book>ただし、代わりに要素を使用して、タイトルを属性または要素としてに配置することもできます<book>

于 2013-01-15T21:59:18.860 に答える
1

最も簡単な方法は、titleプロパティを含むbooksクラスを作成することです。

public class booksType
{
    public string title {get;set;}
}

そして、それをメインクラスの本のプロパティのタイプとして使用します。

public booksType books {get;set;}
于 2013-01-15T21:58:47.223 に答える