簡體   English   中英

為什么我收到InvalidOperationException?

[英]Why am I getting InvalidOperationException?

我有這個代碼:

private string mConfigFileName = "configData.xml";

        private void GetConfiguration() 
        {
            try
            {                
                mConfiguration = (Configuration)XmlUtility.Deserialize(mConfiguration.GetType(), mConfigFileName);                
            }
            catch 
            {
                mConfiguration = new Configuration();
            }
        }

我在線上使用斷點mConfiguration = (Configuration)XmlUtility.Deserialize(mConfiguration.GetType(), mConfigFileName); 它會采用這種方法:

public static Object Deserialize(Type type, string fileName)
        {
            XmlSerializer xs = new XmlSerializer(type);

            XmlTextReader xmlReader = new XmlTextReader(fileName);
            Object data = xs.Deserialize(xmlReader);

            xmlReader.Close();

            return data;
        }      

然后就行Object data = xs.Deserialize(xmlReader); 它正在跳回到Getconfiguration方法的問題:

catch 
            {
                mConfiguration = new Configuration();
            }

例外:

XML文檔中存在錯誤(0,0)

這是xml文檔內容:

<?xml version="1.0" encoding="utf-8"?>
<Configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <LocationX>877</LocationX>
  <LocationY>498</LocationY>
  <CloseOnMouseUp>true</CloseOnMouseUp>
  <DoubleBuffered>true</DoubleBuffered>
  <HideMouseCursor>true</HideMouseCursor>
  <RememberLastPoint>true</RememberLastPoint>
  <ReturnToOrigin>true</ReturnToOrigin>
  <ShowInTaskbar>false</ShowInTaskbar>
  <TopMostWindow>true</TopMostWindow>
  <MagnifierWidth>150</MagnifierWidth>
  <MagnifierHeight>150</MagnifierHeight>
  <ZoomFactor>3</ZoomFactor>
  <SpeedFactor>0.35</SpeedFactor>
</Configuration>

這是完整的異常消息:

System.InvalidOperationException was caught
  HResult=-2146233079
  Message=There is an error in XML document (0, 0).
  Source=System.Xml
  StackTrace:
       at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
       at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader)
       at mws.XmlUtility.Deserialize(Type type, String fileName) in d:\C-Sharp\Download File\Downloading-File-Project-Version-012\Downloading File\XmlUtility.cs:line 53
       at mws.MagnifierMainForm.GetConfiguration() in d:\C-Sharp\Download File\Downloading-File-Project-Version-012\Downloading File\MagnifierMainForm.cs:line 110
  InnerException: System.IO.FileNotFoundException
       HResult=-2147024894
       Message=Could not find file 'D:\C-Sharp\Download File\Downloading-File-Project-Version-012\Downloading File\bin\x86\Release\configData.xml'.
       Source=mscorlib
       FileName=D:\C-Sharp\Download File\Downloading-File-Project-Version-012\Downloading File\bin\x86\Release\configData.xml
       StackTrace:
            at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
            at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
            at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize)
            at System.Xml.XmlDownloadManager.GetStream(Uri uri, ICredentials credentials, IWebProxy proxy, RequestCachePolicy cachePolicy)
            at System.Xml.XmlUrlResolver.GetEntity(Uri absoluteUri, String role, Type ofObjectToReturn)
            at System.Xml.XmlTextReaderImpl.OpenUrlDelegate(Object xmlResolver)
            at System.Threading.CompressedStack.runTryCode(Object userData)
            at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
            at System.Threading.CompressedStack.Run(CompressedStack compressedStack, ContextCallback callback, Object state)
            at System.Xml.XmlTextReaderImpl.OpenUrl()
            at System.Xml.XmlTextReaderImpl.Read()
            at System.Xml.XmlTextReader.Read()
            at System.Xml.XmlReader.MoveToContent()
            at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderConfiguration.Read3_Configuration()
       InnerException: 

編輯:

我將xml文件作為文件添加到我的項目資源中。 並改為代碼:

private string mConfigFileName = Properties.Resources.configData;

        private void GetConfiguration() 
        {
            try
            {                
                mConfiguration = (Configuration)XmlUtility.Deserialize(mConfiguration.GetType(), mConfigFileName);                
            }
            catch 
            {
                mConfiguration = new Configuration();
            }
        }

現在它再次跳到了捕獲,但有一個不同的例外:

路徑中的非法字符

System.ArgumentException was caught
  HResult=-2147024809
  Message=Illegal characters in path.
  Source=mscorlib
  StackTrace:
       at System.IO.Path.CheckInvalidPathChars(String path, Boolean checkAdditional)
       at System.IO.Path.NormalizePath(String path, Boolean fullCheck, Int32 maxPathLength, Boolean expandShortPaths)
       at System.IO.Path.GetFullPathInternal(String path)
       at System.IO.Path.GetFullPath(String path)
       at System.Xml.XmlResolver.ResolveUri(Uri baseUri, String relativeUri)
       at System.Xml.XmlUrlResolver.ResolveUri(Uri baseUri, String relativeUri)
       at System.Xml.XmlTextReaderImpl..ctor(String url, XmlNameTable nt)
       at System.Xml.XmlTextReader..ctor(String url)
       at mws.XmlUtility.Deserialize(Type type, String fileName) in d:\C-Sharp\Download File\Downloading-File-Project-Version-012\Downloading File\XmlUtility.cs:line 52
       at mws.MagnifierMainForm.GetConfiguration() in d:\C-Sharp\Download File\Downloading-File-Project-Version-012\Downloading File\MagnifierMainForm.cs:line 110
  InnerException: 

找不到文件'D:\\ C-Sharp \\下載文件\\下載 - 文件 - 項目 - 版本-012 \\下載文件\\ bin \\ x86 \\ Release \\ configData.xml'

檢查該文件是否確實存在。 如果它包含在解決方案中,請檢查是否將內容設置為編譯類型,將復制到輸出文件夾設置為“如果更新”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM