2016-04-07 3 views
0

Ich versuche meine Klasse zu serialisieren. Aber ich habe die folgende Ausnahme,So beheben Sie System.RuntimeType ist aufgrund seiner Schutzstufe nicht verfügbar. Nur öffentliche Typen können verarbeitet werden.

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: 

Mein Serialisierung Code ist

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

Bitte helfen Sie mir, dieses Problem zu lösen. Gibt es irgendwelche Anpassungen, die ich mit meiner benutzerdefinierten Klasse oder einer anderen vornehmen muss?

+0

Wir so einfach sein könnte Ihre 'CustomSerializer' Klassendefinition sehen. Im Wesentlichen ist ein Teil dieser Klasse nicht serialisierbar. Außerdem scheint es, als ob Sie versuchen, ... einen Serialisierer zu serialisieren? Das scheint ein wenig bizarr, um es gelinde auszudrücken. – Shaamaan

+0

Danke..Aber meine benutzerdefinierte Klasse ist große Code-Teil. Können Sie mir bitte aufzeigen, was die möglichen Ursachen für diese Art von Problem sind? –

Antwort

1

Wenn Sie keine Definition für Ihre CustomSerializer Klasse geben können (nach dem Namen zu urteilen, ist es eine seltsame Sache, zu versuchen und zu serialisieren ...), dann liegt der Grund für diesen Fehler darin, dass die Klasse ein public enthält Eigenschaft, die entweder eine RuntimeType ist oder von RuntimeType erbt oder eine RuntimeType Eigenschaft selbst enthält. Oder vielleicht erbt Ihre gesamte Klasse RuntimeType?

In jedem Fall scheint es RuntimeType ist nicht serialisierbar, so erhalten Sie die Ausnahme, die Sie sehen.

Auch nicht zu wissen, was Ihre CustomSerializer ist ich nicht auf die exakte Lösung zeigen kann - als machen müssen, um eine Eigenschaft nicht serializable ...

+0

danke. Ich hatte die Eigenschaft als Type deklariert. Jetzt habe ich es gelöst, indem ich das [XmlIgnore] -Attribut eingefügt habe –

Verwandte Themen