【问题标题】:Is there a shortcut to binary-serialize every property in an object?是否有二进制序列化对象中每个属性的快捷方式?
【发布时间】:2011-03-26 15:04:39
【问题描述】:

如果有一个对象每个公共属性都必须序列化并且属性很简单(只是数字或字符串或已经实现ISerializable的对象),有没有一种简单的方法可以做到每次都必须创建GetObjectData(SerializationInfo info, StreamingContext context) 和一个以SerializationInfo 作为参数的构造函数?

我知道可以通过反射手动完成,但是 .NET Framework 内部有什么神奇的方法可以做到吗?


所以正确答案是:

不要尝试实现 ISerializable - 它用于自定义序列化。而是在你的类声明之前添加 [Serializable] 属性。

【问题讨论】:

    标签: c# serialization binary-serialization iserializable


    【解决方案1】:

    试试 BinaryFormatter 类 - 应该做你需要的

    编辑:您不是从 BinaryFormatter 派生的 - 它是一个用于进行序列化的实用程序类。这是从文档中复制的示例

    MyObject obj = new MyObject();
    obj.n1 = 1;
    obj.n2 = 24;
    obj.str = "Some String";
    IFormatter formatter = new BinaryFormatter();
    Stream stream = new FileStream("MyFile.bin", FileMode.Create, FileAccess.Write, FileShare.None);
    formatter.Serialize(stream, obj);
    stream.Close();
    

    【讨论】:

    • 同意。这是文档的链接:msdn.microsoft.com/en-us/library/…
    • 我到底需要做什么?从BinaryFormatter 派生似乎是不可能的,因为它是密封的。我是否必须将特定参数传递给Serialize/Deserialize
    • 就我而言,如果MyObject 没有实现ISerializable 接口,则无法序列化。如果它实现它,编译器请求创建以创建GetObjectData(SerializationInfo info, StreamingContext context) 和一个以SerializationInfo 作为参数的构造函数。我做错了什么?
    • 不要尝试实现 ISerializable - 它用于自定义序列化。而是在你的类声明之前添加 [Serializable] 属性。
    猜你喜欢
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 2022-12-28
    • 2013-02-12
    • 1970-01-01
    • 2016-05-01
    相关资源
    最近更新 更多