【问题标题】:How to resolve System.RuntimeType is inaccessible due to its protection level. Only public types can be processed.?由于其保护级别,无法访问如何解析 System.RuntimeType。只能处理公共类型。?
【发布时间】:2016-04-07 09:48:03
【问题描述】:

我正在尝试序列化我的课程。但是我遇到了以下异常,

  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 类定义。本质上,该类的某些部分是不可序列化的。另外,您似乎正在尝试...序列化序列化程序?至少可以这么说,这似乎有点奇怪。
  • 谢谢..但是我的自定义类是大型代码部分。您能否指出此类问题的所有可能根本原因?

标签: c# serialization


【解决方案1】:

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

无论如何,RuntimeType 似乎是不可序列化的,因此你得到了你看到的异常。

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

【讨论】:

  • 谢谢。我已将属性声明为类型。现在我通过包含 [XmlIgnore] 属性来解决它
猜你喜欢
  • 1970-01-01
  • 2015-01-15
  • 2013-08-26
  • 1970-01-01
  • 2013-12-24
  • 1970-01-01
  • 2011-12-06
  • 2015-09-26
  • 2011-09-01
相关资源
最近更新 更多