【问题标题】:Type in assembly is not marked as serializable程序集中的类型未标记为可序列化
【发布时间】:2015-09-27 05:32:49
【问题描述】:

我有一个entityClass,我希望将其序列化为克隆。但是这个类有一个来自自定义框架的参考程序集,我无权访问代码。每当我尝试序列化entityClass 对象时,它都会抛出异常,

Type ... in Assembly '..., Version=4.1.0.0, Culture=neutral, PublicKeyToken=null' 未标记为可序列化。

【问题讨论】:

    标签: c# object serialization clone


    【解决方案1】:

    假设问题是对象上的字段/属性属于问题类型,您需要将该字段/属性标记为NonSerialized,或者创建标记为Serializable的类型的派生类

    如果您从该类型派生并将其标记为序列化,您很可能必须自己创建序列化逻辑。这需要您实现ISerializable 和一个采用 SerializationInfo 和 StreamingContext 的序列化构造函数。

    This link 可能会有所帮助。

    【讨论】:

      【解决方案2】:

      如果您有 PropertyChanged 事件,则在所有对象(类)中将其设置为 [NonSerialized],您将进行序列化。

          [field: NonSerialized]
          public event PropertyChangedEventHandler PropertyChanged;
      

      【讨论】:

      • 这为我解决了一个类似的问题。 C# 中的所有事件都必须是 [field: NonSerialized],否则它们会尝试将它们“保存”为函数。
      【解决方案3】:

      如果您收到此错误,请尝试将 Serializable 属性添加到您的类。 示例:

         [Serializable]
         public class MyModel 
         {
            public int? ID { get; set; }
            ...
         }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多