相关疑难解决方法(0)

使用DataContractSerializer进行自定义序列化

我目前正在为我的DataSet使用包装类,以实现自定义序列化.我想使用DataContractSerializer(更像是必须使用它)但仍然支持自定义序列化.问题是,[DataContract][Serializable]属性似乎并没有很好地相处...我怎么能覆盖序列化,并支持BOTH DataContract和ISerializable序列化?包装器DataSet类的代码带到这里:

[Serializable()]    
[System.Runtime.InteropServices.ComVisible(false)]
public class TestDatasetWrapper : TestDataSet, ISerializable
{
    public TestDatasetWrapper()
        : base()
    {}

    protected TestDatasetWrapper(SerializationInfo info, StreamingContext context)
    {
        SerializationHelper.DeserializeTypedDataSet(info, this);
    }

    public override void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        SerializationHelper.AddTypedDataSetObjectData(info, this);
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

c# serialization datacontract datacontractserializer

10
推荐指数
1
解决办法
8983
查看次数

为什么要使用序列化

我已经看过几个带有serializable属性的例子,如下所示:

[Serializable()]
            public class sampleClass
            {
                public int Property1{ get; set; }
                public string Proerty2{ get; set; }

                public sampleClass() { }
                public sampleClass(int pr1, int pr2)
                {
                    pr1 = pr1;
                    Name = pr2.ToString();
                }
            }
Run Code Online (Sandbox Code Playgroud)

我从来没有很好地理解它是如何工作的,但是从msdn:

序列化允许开发人员保存对象的状态并根据需要重新创建它,提供对象的存储以及数据交换.通过序列化,开发人员可以执行诸如通过Web服务将对象发送到远程应用程序,将对象从一个域传递到另一个域,将对象作为XML字符串传递到防火墙,或者维护安全性或特定于用户的操作跨应用程序的信息

但问题是,在我的代码示例中,我认为没有用处.只是一个用于从数据库中检索数据的对象,没什么特别的.何时使用以及何时不使用序列化有什么其他用途.例如,我应该总是使用序列化,因为它更安全吗?是这样慢吗?

更新:谢谢你们所有的好答案

c# asp.net serialization

6
推荐指数
2
解决办法
7181
查看次数

实现ISerializable是不必要的?

我很难理解对ISerializable界面的需求......我想我在这个主题中缺少一些非常重要的东西,所以如果有人能帮我一把,我会很感激.

这非常有效 -

[Serializable]
    class Student
    {
        public int age;
        public string name;

        public Student()
        {
            age = 0;
            name = null;
        }
    }
 class Program
    {
        public static void Main()
        {
            Stream stream = File.Open("Test123.txt", FileMode.Create);

            BinaryFormatter bf = new BinaryFormatter();

            Student s1 = new Student();
            s1.name = "Peter";
            s1.age = 50;
            bf.Serialize(stream, s1);

            stream.Close();

            Stream stream2 = File.Open("Test123.txt", FileMode.Open);

            Student s2 = (Student)bf.Deserialize(stream2);

            Console.WriteLine(s2.age);

        }
Run Code Online (Sandbox Code Playgroud)

它没有实现ISerializable而且没有覆盖GetObjectData().怎么会这样?那么界面有什么用?

谢谢.

c# serialization

1
推荐指数
1
解决办法
967
查看次数