这是实际的代码,不是完整的代码,而是它的主要部分。基本上这里我在写一个插件,它实现了一些接口,我需要存储插件的状态,因为它在整个过程中运行了多次。但是通过 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);