0

ディクショナリを Xml ファイルにシリアル化する際に助けを求めることができればと思っていました。

データベースからデータを抽出すると、次のように表示され、Xml ファイルでこれが必要になります。

ここに画像の説明を入力

これは、リストをシリアル化するメソッドとしてシリアル化する予定のクラス(オブジェクト)です。

public class Product
{
    static public void SerializeToXMLCollection(List<Product> products)
    {
        XmlSerializer serializer = new XmlSerializer(typeof(List<Product>));
        string path = string.Concat(Environment.CurrentDirectory, "../../Products.xml");
        TextWriter textWriter = new StreamWriter(path);
        serializer.Serialize(textWriter, products);
        textWriter.Close();
    }

    public Guid guid
    {
        get;
        set;
    }


    public Dictionary<string, List<string>> MyDictionary
    {
        get;
        set;
    }

これは、各 Product インスタンスを追加するために使用するリストを含むクエリです。

List<Product> products = new List<Product>();

while (dbread.Read())
        {

            Product p = new Product();

            string code = (string)dbread["ProdId"];
            string Subject = (string)dbread["Subject"];
            string GeneralSubject = (string)dbread["GeneralSubject"];
            p.guid = Guid.NewGuid();

            if (dict.ContainsKey(code))
            {
                dict[code].Add(Subject);


            }
            else
            {

                dict.Add(code, new List<string> { Subject, GeneralSubject});

            }
            //I assign the dict object to myDictionary in the Product class
            p.MyDictionary = dict;
            //now I add the entire object to List<Product> products so as to serialize this list   
            products.Add(p);

最後に、リストをシリアル化しようとします

Product.SerializeToXMLCollection(products);

しかし、InvalidOPerationException が発生します。

このオブジェクトをシリアル化するにはどうすればよいですか? 問題は、オブジェクトに辞書が含まれている可能性があると思います。

4

1 に答える 1

1

DataContractSerializer は Dictionary オブジェクトをサポートしていると思います。ある時点でそれを使用したことさえ覚えていますが、自分の例を見つけることができないようです.

ただし、公式ドキュメント ページにはいくつかの例があります: http://msdn.microsoft.com/en-us/library/system.runtime.serialization.datacontractserializer.aspx

それ以外の場合は、http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspxなど、XML シリアル化をサポートする代わりの Dictionary クラスを使用する必要がある場合があります。

于 2013-02-17T10:33:24.997 に答える