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 に答える