2016-04-07 20 views
0

私はクラスをシリアライズしようとしています。しかし、私は次の例外を得た、解決方法System.RuntimeTypeは保護レベルのためにアクセスできません。パブリックタイプのみを処理できます。

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

である私は、この問題を解決するのに役立ちます。私のカスタムクラスやその他のものと一緒に行う必要があるカスタマイズはありますか?

+0

私たちは、あなたの 'CustomSerializer'クラス定義を参照する必要があります。本質的に、そのクラスの一部はシリアライズ可能ではありません。また、シリアライザをシリアライズしようとしているようですね。それは少し奇妙に思えます。 – Shaamaan

+0

ありがとうございます。私のカスタムクラスは大きなコード部分です。このような問題の根本的な原因は何ですか?ありがとう。 –

答えて

1

CustomSerializerクラスの定義を提供できない場合は(名前で判断すると奇妙なことですが...)、このエラーが表示される理由は、クラスに公開が含まれているためですプロパティはRuntimeTypeであるか、RuntimeTypeから継承するか、またはRuntimeTypeプロパティを含んでいます。あるいは、クラス全体がRuntimeTypeを継承していますか?

いずれにしても、RuntimeTypeはシリアライズ可能ではないようですので、あなたは例外を受け取ります。

繰り返しになりますが、あなたのCustomSerializerが何であるかを知らない私は、正確な解を指すことはできません - それはシリアライズない財産を作るのと同じくらい簡単かもしれません...

+0

ありがとうございます。私はタイプとしてプロパティを宣言していました。今私は[XmlIgnore]属性を含めることで解決しました –

関連する問題