c# - 如何解决 System.RuntimeType 由于其保护级别而无法访问的问题。只能处理公共(public)类型。

标签 c# serialization

我正在尝试序列化我的类(class)。但我遇到了以下异常,

  System.InvalidOperationException was unhandled
  HResult=-2146233079
  Message=There was an error generating the XML document.
  Source=System.Xml
  StackTrace:
       at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
       at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o)
       at FormDemo.Form1.PivotGridSettings() in D:\Feature\XML Serialization\CS\Form1.cs:line 75
       at FormDemo.Form1..ctor() in D:\Feature\XML Serialization\CS\Form1.cs:line 32
       at FormDemo.Program.Main() in D:\Feature\XML Serialization\CS\Program.cs:line 25
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: System.InvalidOperationException
       HResult=-2146233079
       Message=System.RuntimeType is inaccessible due to its protection level. Only public types can be processed.
       Source=System.Xml
       StackTrace:
            at System.Xml.Serialization.TypeDesc.CheckSupported()
            at System.Xml.Serialization.TypeScope.GetTypeDesc(Type type, MemberInfo source, Boolean directReference, Boolean throwOnError)
            at System.Xml.Serialization.XmlSerializationWriter.CreateUnknownTypeException(Type type)
            at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterCustomSerializer.Write20_Type(String n, String ns, Type o, Boolean isNullable, Boolean needType)
            at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterCustomSerializer.Write24_CustomClass(String n, String ns, CustomEngine o, Boolean isNullable, Boolean needType)
            at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterCustomSerializer.Write25_CustomClass(String n, String ns, CustomSeriaizer o, Boolean isNullable, Boolean needType)
            at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterCustomSerializer.Write26_CustomSerializer(Object o)
       InnerException: 

我的序列化代码是

XmlTextWriter xw = new XmlTextWriter("CustomClassSchema.xml", System.Text.Encoding.UTF8);
xw.Formatting = Formatting.Indented;
XmlSerializer serializer = new XmlSerializer(typeof(CustomSerializer));
CustomSerializer customSerializer = new CustomSerializer()
serializer.Serialize(xw, customSerializer);

请帮我解决这个问题。我需要对我的自定义类进行任何自定义吗?

最佳答案

如果您无法为您的 CustomSerializer 类提供定义(从名称来看,尝试序列化是一件奇怪的事情......),那么您看到此错误的原因是因为该类包含一个公共(public)属性,该属性要么是一个 RuntimeType,要么继承自 RuntimeType,要么包含一个 RuntimeType 属性本身。或者也许您的整个类都继承RuntimeType

无论如何,RuntimeType 似乎不可序列化,因此您会收到所看到的异常。

同样,不知道您的 CustomSerializer 是什么,我无法指出确切的解决方案 - 它可能就像使属性不可序列化一样简单......

关于c# - 如何解决 System.RuntimeType 由于其保护级别而无法访问的问题。只能处理公共(public)类型。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36472485/

相关文章:

c# - C#中使用反射覆盖虚方法表

c# - 将内部控件内容属性公开为自己的[用户控件]

Java - 从文件中读取松散结构的数据

c# - 字典的 JSON 序列化为名称 :value instead of {name:name, 值:值}

java - 来自 URL 的 JSON 序列化总是返回 NULL

.net - 序列化 Entity Framework 对象,保存到文件,读取和反序列化

javascript - 如何在 JS 中创建上下文数组

c# - 嵌套的foreach循环慢

c# - 使用 Bitmap 调整大图像大小时出现 OutOfMemoryException

c# - 自定义二进制文件的惯用 C# 反序列化?