将对象保存在文件中,或以字节为单位获取对象?

时间:2010-12-26 01:36:34

标签: .net wpf

我想知道我(在C#或VB .NET中)如何将对象保存到文件中。

它需要与任何类型的对象兼容。我怎样才能做到这一点?假设我要保存“MyPersonClass”类型的对象。

我正在使用带有WPF的.NET 4.0框架。

4 个答案:

答案 0 :(得分:2)

您应该从ISerializable接口继承您的类。可以在下一个链接中找到示例和解释:

http://msdn.microsoft.com/en-us/library/system.runtime.serialization.iserializable.aspx

答案 1 :(得分:2)

如果您的对象是Serializable,则可以使用此处描述的方法将其序列化并保存到磁盘:http://msdn.microsoft.com/en-us/library/4abbf6k0%28v=VS.100%29.aspx

答案 2 :(得分:2)

如果您正在寻找与非.NET应用程序的一些控制和兼容性,请考虑使用SoapFormatter类(如John Boker的MSDN链接中所述)或XML序列化。后者与标准序列化略有不同。

您需要XmlSerializer类:

System.Xml.Serialization.XmlSerializer

要使用XML序列化序列化MyPersonClass,您需要XmlSerializer和StreamWriter的实例(在System.IO中):

XmlSerializer serializer = new XmlSerializer(typeof(MyPersonClass));
StreamWriter xmlFile = new StreamWriter(@"InsertFileName");
serializer.Serialize(xmlFile, classInstance);
xmlFile.Close();

我希望这很有用!

答案 3 :(得分:1)

首先,您必须将对象标记为可序列化:

[System.Serializable]
public class MyPersonClass
{
    public string Firstname
    {
        get;
        set;
    }

    public string Lastname
    {
        get;
        set;
    }
}

之后,您可以使用BinaryFormatter类将每个对象保存为字节。

到字节:

public static byte[] ObjectToBytes(object obj)
{
    byte[] objAsBlob;

    using (System.IO.MemoryStream temp = new System.IO.MemoryStream())
    {
        System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
        formatter.Serialize(temp, obj);

        objAsBlob = temp.ToArray();
    }

    return objAsBlob;
}

来自字节:

public static TObj BytesToObject<TObj>(byte[] blob)
{
    object objFromBytes;

    using (System.IO.MemoryStream temp = new System.IO.MemoryStream(blob))
    {
        System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
        objFromBytes = formatter.Deserialize(temp);
    }

    return (TObj)objFromBytes;
}