-2

これは実際のコードであり、完全なコードではなく、その主要部分です。基本的にここでは、いくつかのインターフェイスを実装するプラグインを作成しています。プロセス全体で複数回実行されるため、プラグインの状態を保存する必要があります。しかし、xml を介して状態を保存するとエラーが発生します

using System;
4

3 に答える 3

5

あなたのコードはコンパイルされません。state非静的フィールドを設定しようとする代わりに、作成したインスタンスを使用してください。また、IDisposable リソースをusingステートメントでラップして、適切に破棄するようにしてください。

using System.IO;
using System.Xml.Serialization;

namespace Plugin
{
    public class state
    {
        public int a;
        public int b;
    }
    public class xyz
    {
        public static void Main()
        {
            state s = new state();
            s.a = 3;
            s.b = 5;
            XmlSerializer x = new XmlSerializer(s.GetType());
            using (StreamWriter sw = new StreamWriter(@"E:\state\state.xml"))
            {
                x.Serialize(sw, s);
            }
        }
    }
}

次の XML ファイルを生成します。

<?xml version="1.0" encoding="utf-8"?>
<state xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <a>3</a>
  <b>5</b>
</state>
于 2012-06-11T17:39:23.243 に答える
1

フィールドをシリアル化することもお勧めできません。プロパティを使用する必要があります

public class state
{
    public int A { get; set; }
    public int B { get; set; }
}

state s = new state() { A = 3, B = 6 };

XmlSerializer x = new XmlSerializer(s.GetType());
using (StreamWriter sw = new StreamWriter(@"E:\state\state.xml"))
{
   x.Serialize(sw, s);
}
于 2012-06-11T17:46:25.010 に答える
0

変数 (s) の代わりにクラス (状態) の名前を使用しているため、コードはコンパイルされません。

次のコードは機能し、usingを使用して、例外が発生した場合でもストリームが確実に閉じられるようにします。

        var s = new state {a = 3, b = 5};

        var x = new XmlSerializer(typeof(state));
        using(var sw = new StreamWriter(@"E:\state\state.xml"))
            x.Serialize(sw, s);
于 2012-06-11T17:43:01.950 に答える