如何解决System.RuntimeType由于其保护级别而无法访问。只能处理公共类型。?

时间:2016-04-07 09:48:04

标签: c# serialization

我正在尝试序列化我的课程。但是我得到了以下例外,

  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);

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

1 个答案:

答案 0 :(得分:1)

If you are not able to provide a definition for your CustomSerializer class (judging by the name it's a strange thing to try and serialize...), then the reason you are seeing this error is because the class contains a public property which either IS a RuntimeType or inherits from RuntimeType or contains a RuntimeType property itself. Or perhaps your entire class inherits RuntimeType?

In any case, it seems RuntimeType is not serializable, thus you are getting the exception you see.

Again, not knowing what your CustomSerializer is I cannot point to the exact solution - it might be as simple as making a property not serializable...