48

Dictionary が でサポートされていない理由について知りXmlSerializerたいですか?

DataContractSerializerオブジェクトを使用して a に書き込むことで十分に簡単に回避できますが、それが実際には KeyValuePairs の配列であることを考えると、 a が対処するのをXmlTextWriter困難にする Dictionary の特性は何ですか。XmlSerializer

IDictionary<TKey, TItem>実際、 を期待するメソッドに を渡すことができますIEnumerable<KeyValuePairs<TKey, ITem>>

4

3 に答える 3

32

ハッシュテーブルには、通常、ハッシュコードと等値比較プロバイダーが必要です。これらは XML で簡単にシリアライズできず、確実に移植できません。

しかし、あなたはすでに答えを見つけたと思います。ハッシュテーブルを としてシリアル化し、ハッシュテーブルList<KeyValuePair<K,V>>に (再) 構築します。

于 2010-05-26T09:18:12.537 に答える
7

XmlSerializerこれは遅すぎます-しかし、私は自分で答えを探しているときにこの質問を見つけ、すべてをシリアル化する別のツールに置き換えるという私の最終的な答えを共有すると思いました:

http://www.sharpserializer.com

ディクショナリ、多層カスタム型、さらには型引数としてインターフェイスを使用するジェネリックをシリアル化することで、箱から出してすぐに機能しました。また、完全に許可されたライセンスを持っています。

パヴェル・イジコウスキー、ありがとう!

于 2011-09-22T22:40:33.013 に答える
3

ExtendedXmlSerializerを使用できます。クラスがある場合:

public class TestClass
{
    public Dictionary<int, string> Dictionary { get; set; }
}

このクラスのインスタンスを作成します。

var obj = new TestClass
{
    Dictionary = new Dictionary<int, string>
    {
        {1, "First"},
        {2, "Second"},
        {3, "Other"},
    }
};

ExtendedXmlSerializer を使用して、このオブジェクトをシリアル化できます。

var serializer = new ConfigurationContainer()
    .UseOptimizedNamespaces() //If you want to have all namespaces in root element
    .Create();

var xml = serializer.Serialize(
    new XmlWriterSettings { Indent = true }, //If you want to formated xml
    obj);

出力 xml は次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<TestClass xmlns:sys="https://extendedxmlserializer.github.io/system" xmlns:exs="https://extendedxmlserializer.github.io/v2" xmlns="clr-namespace:ExtendedXmlSerializer.Samples;assembly=ExtendedXmlSerializer.Samples">
  <Dictionary>
    <sys:Item>
      <Key>1</Key>
      <Value>First</Value>
    </sys:Item>
    <sys:Item>
      <Key>2</Key>
      <Value>Second</Value>
    </sys:Item>
    <sys:Item>
      <Key>3</Key>
      <Value>Other</Value>
    </sys:Item>
  </Dictionary>
</TestClass>

nugetから ExtendedXmlSerializer をインストールするか、次のコマンドを実行できます。

Install-Package ExtendedXmlSerializer
于 2016-09-22T13:20:56.780 に答える