1

C#Visual Studio 2008、MVC1での作業。

Webサービスからxmlファイルをフェッチし、それにいくつかのノードを追加してxmlファイルを作成しています。ここで、ビューを厳密に型指定するために使用されるモデルであるクラスに逆シリアル化したいと思いました。

まず第一に、ファイルシステムにxmlを保存せずにそれを達成するための問題に直面しています。これは、このシリアル化と逆シリアル化がどのように機能するかわからないためです。方法はあると思いますが、それは時間の問題です。

しかし、Webで以前のものを検索して、LINQ to XMLに出くわしました。今では、それを使用する方がよいかどうか疑問に思っています。

xmlはいくつかのクライアントの詳細によって形成され、基本的にはそれらすべてを使用します。

ヒントはありますか?

ありがとう!!

4

3 に答える 3

1

これを試して:

XmlSerializer xmls = new XmlSerializer(typeof(XElement)); 
FileStream FStream;
try 
{             
   FStream = new FileStream(doctorsPath, FileMode.Open);
  _Doctors = (XElement)xmls.Deserialize(FStream); FStream.Close(); 
   FStream = new FileStream(patientsPath, FileMode.Open); 
  _Patients = (XElement)xmls.Deserialize(FStream)
   FStream.Close(); 
   FStream = new FileStream(treatmentsPath, FileMode.Open);
  _Treatments = (XElement)xmls.Deserialize(FStream);
    FStream.Close(); 
} 
catch 

{ }

これにより、すべての XML ファイルが XElement 変数に読み込まれます。try – catch ブロックは、try ブロック内の関数の 1 つが例外をスローした場合、プログラムが catch セクションにジャンプして何も起こらないことを保証する例外処理の形式です。ファイルを操作するとき、特にファイルを読み取るときは、try – catch を使用することをお勧めします。

于 2012-04-04T16:33:28.573 に答える
1

XElement を との間で保存できますMemoryStream(ファイル ストリームに保存する必要はありません)。

 MemoryStream ms = new MemoryStream();
 XmlWriter xw = XmlWriter.Create(ms);
 document.Save(xw);
 xw.Flush();

次に、位置を 0 にリセットすると、DataContractSerializer を使用して逆シリアル化できます。

 ms.Position = 0;
 DataContractSerializer serializer = new DataContractSerializer(typeof(Model));
 Model model = (model) serializer.ReadObject(ms);

シリアライゼーションがどのように機能するかについては他にもオプションがあります。これがあなたの持っているものではない場合は、あなたが何を使っているか教えてください。私がお手伝いします。

于 2012-04-04T16:36:56.547 に答える
1

LINQ to XML は優れた機能です。あなたはいつもそれに頼ることができます。ファイルからデータを読み書きする必要はありません。XDocument には文字列またはストリームのいずれかを指定できます

XML 要素を XDocument オブジェクトにロードする方法はたくさんあります。該当する Load 関数を参照してください。コンテンツをロードしたら、要素を簡単に追加/削除でき、後で必要に応じてディスクに保存できます。

于 2012-04-04T17:25:46.473 に答える