1

我有一个简单的结构,如下。

public struct Structure
{
    public byte Style;
    public string Value1;
    public string Value2;
    public int Value3;
    public bool Active;
}

我想使用可变大小将这个结构的数组存储为文件。该文件将在程序启动时自动加载,并随着程序的使用进行更新。我可以弄清楚如何在程序中使用它,我只是不确定我应该用来存储它的方法。我猜我应该为每个值使用带有前缀字节长度的二进制写入器?如果这是正确的,那么如何存储和加载 Structure[X] 数组的示例将非常有帮助。出于美学原因,我想将其保存在具有自定义扩展名的文件中(即:Array.ext),尽管我不反对任何其他将在启动之间以该格式存储数据的解决方案。

4

2 回答 2

2

您可以添加[Serializable]到此并使用二进制序列化将数据序列化为字节数组。比您可以将其保存到文件中。

public static string Serialize(object o)
{
    using (var s = new FileStream())
    {
        _binaryFormatter.Serialize(s, o);
    }
}
于 2012-10-21T05:28:32.933 回答
1

你有几个选择。如果您需要以人类可读的格式存储文件,您可以使用 XML 或 JSON 序列化器/反序列化器。这是一个 XML 示例

public static void Serialize(Structure[] input) 
{
  var serializer = new XmlSerializer(input.GetType());
  var sw= new StreamWriter(@"C:\array.ext");
  serializer.Serialize(sw, input);
  sw.Close();
}    

public static Structure[] Deserialize() 
{
  var stream = new StreamReader(@"C:\array.ext");
  var ser = new XmlSerializer(typeof(Structure[]));
  object obj = ser.Deserialize(stream);
  stream.Close();
  return (Structure[])obj;
}

如果你想使用二进制序列化器

public static void Serialize(Structure[] input) 
{
    var stream = new StreamWriter(@"C:\Array.ext");
    var bformatter = new BinaryFormatter();    
    bformatter.Serialize(stream, input);
    stream.Close();
}

public static Structure[] Deserialize() 
{
    var stream = new StreamReader(@"C:\array.ext");
    var bformatter = new BinaryFormatter();
    var obj = bformatter.Deserialize(stream);
    stream.Close();
    return (Structure[])object;
}

您还需要标记您的[Serializable]课程

[Serializable]
public class Structure { //etc
于 2012-10-21T05:28:33.023 回答