0

私は次のような構造のXMLファイルを持っています

<items>
  <item>
    <someDetail>
      A value here
     </someDetail>
  </item>
  <item>
    <someDetail>
      Another value here
     </someDetail>
  </item>
</items>

複数のアイテムが含まれています。

理想的には、セッション開始時にXMLを逆シリアル化して、XMLデータをクラスに基づくオブジェクトに変換したい(c#asp.net 4)

私はいくつかの方法を試しましたが、成功しなかったか、不格好でエレガントではないように見える解決策がありました。

人々は何を提案しますか?

私はこのxsd.exeツールを使用してみましたが、xmlリーダークラスとXElementusinクラスを使用してxmlをループし、新しいsomeObject(props)を作成しました。

これらはおそらく最良の方法および/または唯一の方法ですが、エンティティフレームワークを使用するデータベースソースにとっては非常に簡単であるため、xmlソースから同じことを行う同様の方法があるかどうか疑問に思いました。

4

3 に答える 3

2

XMLを逆シリアル化して、XMLデータが逆シリアル化されるXML構造に対応するクラスを作成するための最良の方法。

最新のシリアル化テクノロジーは、データコントラクトとを使用しDataContractSerializerます。

上記のクラスを属性で装飾し、DataMemberシリアDataItemライザーを使用して逆シリアル化します。

于 2012-04-11T18:22:50.687 に答える
1

.NET XMLシリアル化を直接使用します-クラス宣言:

public class Item {

  [XmlElement("someDetail")]
  public string SomeDetail;

} // class Item


[XmlRoot("items")]
public class MyData {

  [XmlElement("item")]
  public List<Item> Items;

  public static MyData Deserialize(Stream source)
  {
    XmlSerializer serializer = new XmlSerializer(typeof(MyData));
    return serializer.Deserialize(source) as MyData;
  } // Deserialize

} // class MyData

次に、XMLを読み取ります。

  using (FileStream fs = new FileStream(@"c:\temp\items.xml", FileMode.Open, FileAccess.Read)) {
    MyData myData = MyData.Deserialize(fs);
  }
于 2012-04-11T18:24:14.313 に答える
1

私は、単純な統一されたメカニズムは存在しないと結論付けました(おそらく、重要なケースに伴う固有の複雑さのために、この質問は、例のxmlのような単純なシナリオのコンテキストで常に発生します)。

XMLシリアル化は非常に使いやすいです。あなたの例では、アイテムを含むクラスと実際のアイテムの別のクラスを作成する必要があります。すべてを正しく機能させるには、いくつかの属性を適用する必要があるかもしれませんが、コーディングはそれほど多くありません。その後、それは同じくらい簡単です-

var serializer = new XmlSerializer(typeof(ItemsContainer));
var items = serializer.Deserialize(...) as ItemsContainer;

データセットは「昨日の技術」と見なされることもありますが、問題をうまく解決するときに使用します。デザイナーを活用できます。生成されたコードはきれいではありませんが、肝心なのは、自動生成されたアダプターを介してデータベースに永続化し、データセットのメソッドを使用してXMLに永続化できることです。このように読むこともできます。

XSD.exeは、慣れればそれほど悪くはありません。ヘルプをテキストファイルに印刷して、しばらくの間ソリューションに含めました。/ cオプションを使用してクラスを作成すると、XmlSerialzierで使用できるクリーンなコードが得られます。

Visual Studio 2010(おそらく他のバージョンも)には、Xmlファイルを開いたときに表示されるXMLメニューがあり、そこからサンプルXmlからXSDを生成することもできます。したがって、いくつかの手順で、サンプルxmlを使用してXSDを生成し、それをXSD.exeで実行して、生成されたクラスを数行のXmlSerializerコードで使用できます...多くの策略のように感じますが、慣れますそれに。

于 2012-04-11T18:35:44.197 に答える