3

I have a plain old XML-file. Through some XSD.EXE magic I made a model. Now I want to read the XML data into the model. Normally this is just XmlSerializer.Deserialize, but it keeps complaining about namespaces and whatnot.

Now here is the thing: I don't care about namespaces, or anything else in XML. I just want the deserialization to work with a "simple one-liner". I'm planning to parse a lot of XML in my life and I'm not interested in spending my time fighting a bloated format about details we both know aren't important.

So I'm looking for a XML Deserializer for .Net that removes the fuzz and simply sees a <obj> <Name> ... and puts its data into public string Name { get; set; }. It should not be more difficult than for example MyObj myObj = SimpleXml.Deserialize<MyObj>(xmlString);. Pretty much like JSON deserializers work.

Where can I find an easy to use XML deserializer like the one I described?

I do understand that this limits my XML reading capability.

4

2 に答える 2

1

xsd.exeを使用して同じ問題が発生しました。それを機能させるために修正する必要のある巨大な自動生成ファイルは必要ありません。また、ハッキングや名前空間の削除を伴う逆シリアル化のような作業に何時間も費やしました。 。

ファズのない1行のソリューションが必要な場合は、xsd2codehttp://xsd2code.codeplex.com/)を試してください。これで問題ありません。クラスの生成に関する小さなガイドを読む必要があることに注意してください。生成す​​る直前にすべての設定を取得できます。[生成]をクリックするだけでは不十分です。少なくとも私にとっては、正しいデフォルト設定がありませんでしたが、正しく設定するためのそよ風。

だから私はしました:

  1. xsd.exe(xsd Hoorah.xml)を使用してxsdを生成しましたが、xsd.exeのその部分は問題ありません。
  2. xsd2codeを使用してクラスを生成しました(インストールしてガイドを参照してください)
  3. xsd2codeから生成されたクラスに付属するdeserializeメソッドを使用しました

    var hoorah = Hoorah.Deserialize(xml);
    

うまくいきます!

于 2013-02-24T17:44:24.200 に答える
1

UI クライアントにこの種のヘルパーを使用しています。

public string Serialize<T>(T o)
{
    var x = new XDocument();
    using(var w = x.CreateWriter())
        new XmlSerializer(typeof(T)).Serialize(w, o);
    return x.ToString();
}

public T Deserialize<T>(string s)
{
    return
        (T)new XmlSerializer(typeof(T))
        .Deserialize(XDocument.Parse(s)
        .CreateReader());
}

Windows サービスを使用している場合は注意してください。シリアル化に既知のメモリ リークがあります: http://dotnetcodebox.blogspot.fr/2013/01/xmlserializer-class-may-result-in.html

これを回避するにnew XmlSerializerは、上記のコードを、ブログ投稿で説明されているように、キャッシュ (辞書など) から XmlSerializers を作成/取得するメソッドに置き換えることをお勧めします。

于 2013-02-24T10:29:20.793 に答える