c# - 避免使用不支持序列化的类

标签 c# serialization

大家:

我看到了一种避免使用某些不支持序列化的类的方法。但我不知道使用这种方法的原因。所以我在这里提出了这个问题。

所以前面的代码如下所示

    [Serializable]
    Class OutterClass
    {
        public UsingClass UsingClassMember
        {
            get;
            set;
        }
    }

所以在这里,如果我想序列化OutterClass,就会出现异常,因为UsingClass不支持序列化。显然,如果我想序列化OutterClass,OutterClass中的所有成员都应该支持序列化。

但是如果我修改代码如下。序列化操作可以成功完成。

    [Serializable]
    Class OutterClass
    {
        [NonSerialized]
        private UsingClass m_UsingClassMember;
        public UsingClass UsingClassMember
        {
            get { return m_UsingClassMember; };
            set { m_UsingClassMember = value };
        }
    }

我不知道这个修改的原因。似乎属性 UsingClassMember 的序列化不需要序列化类 UsingClass 本身。谁能给我一个解释?

谢谢!

最佳答案

关于如何防止 C# 自动属性序列化,您有很好的示例。

Attribute 'NonSerialized' is not valid on this declaration type. It is only valid on 'field' declarations.

所以你不能在 C# auto 属性上设置“NonSerialized”,但是如果像你的第二个例子那样带有 baking up 字段的属性你可以像你一样设置它。那么 property 和 field 都不会被序列化。

在第二种情况下,编译器将忽略该属性,因为下划线字段是非序列化的,您不会像第一种情况那样得到异常。

如果你想序列化,那么你必须在 UsingClass 上设置 Serializable 属性,但如果你不需要序列化,你可以使用第二种方法或使用 [XmlIgnoreAttribute] 在您的汽车属性上

关于c# - 避免使用不支持序列化的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17713655/

相关文章:

c# - 将目录添加到现有的 .zip 文件

c# - 如何在 Task<int> 列表之间插入延迟?

java - 序列化具有关键事件的游戏状态。检索副本不需要我的键盘事件?

c++ - 管道序列化

java - 阻止 GSON 序列化 JSON 字符串

C# WPF 在启动时崩溃

c# - 将 NServiceBus 事件从 v6 JSON 发布到 v4 XML 环境

c# - 如何覆盖 Autofac 子范围中的 Serilog 记录器?

c# - 为什么 .NET 允许将 SerializableAttribute 应用于枚举?

c# - 将 List<String> 编码为普通 String 并将其解码回来的最简单方法是什么?