-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 回答