これは実際のコードであり、完全なコードではなく、その主要部分です。基本的にここでは、いくつかのインターフェイスを実装するプラグインを作成しています。プロセス全体で複数回実行されるため、プラグインの状態を保存する必要があります。しかし、xml を介して状態を保存するとエラーが発生します
using System;
これは実際のコードであり、完全なコードではなく、その主要部分です。基本的にここでは、いくつかのインターフェイスを実装するプラグインを作成しています。プロセス全体で複数回実行されるため、プラグインの状態を保存する必要があります。しかし、xml を介して状態を保存するとエラーが発生します
using System;
あなたのコードはコンパイルされません。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>
フィールドをシリアル化することもお勧めできません。プロパティを使用する必要があります
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);
}
変数 (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);