2012-01-24 14 views
0

なぜ次はデシリアライズしませんか?例外は次のとおりです。私は新しいストリームのシリアライゼーションとデシリアライゼーションを使用して、「ストリームの終了」エラーを回避していることに注意してください。同様の問題を回避するために、新しいXmlSerializerインスタンスも使用しています。XmlSerializerとXmlException - ルート要素がありません

シリアル化が正常に動作します。私は同様の名前の質問を無駄に見直しました。

例外:

System.InvalidOperationException was unhandled 
    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(Stream stream) 
    at TestSerilalization.Program.Main(String[] args) in D:\MyDocs\Projects\dsb\Src\Apps\RecipeMgr\Other\TestSerlialization\Program.cs:line 45 
    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.ThreadHelper.ThreadStart_Context(Object state) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
    at System.Threading.ThreadHelper.ThreadStart() 
InnerException: System.Xml.XmlException 
    Message=Root element is missing. 
    Source=System.Xml 
    LineNumber=0 
    LinePosition=0 
    SourceUri="" 
    StackTrace: 
     at System.Xml.XmlTextReaderImpl.Throw(Exception e) 
     at System.Xml.XmlTextReaderImpl.ParseDocumentContent() 
     at System.Xml.XmlTextReaderImpl.Read() 
     at System.Xml.XmlTextReader.Read() 
     at System.Xml.XmlReader.MoveToContent() 
     at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderClass1.Read4_Class1() 
    InnerException: 

コード:

static void Main(string[] args) 
{ 
XmlSerializer xmlSerializer = new System.Xml.Serialization.XmlSerializer(typeof(Class1), "http://xxx"); 

Class1 c1 = new Class1(); 

FileStream strm = File.Create("d:\\temp\\classes.xml"); 
xmlSerializer.Serialize(strm, c1); 
strm.Close(); 

Class1 c2 = null; 
FileStream strm2 = File.Create("d:\\temp\\classes.xml"); 
XmlSerializer xmlSerializer2 = new System.Xml.Serialization.XmlSerializer(typeof(Class1), "http://xxx"); 
c2 = (Class1)xmlSerializer2.Deserialize(strm2); 
strm2.Close(); 
} 

public class Class1 
{ 
public Class1() 
    { 
    m_Class2 = new Class2(); 
    } 

public Class2 class2 
    { 
    get { return m_Class2; } 
    set { m_Class2 = value; } 
    } 

private Class2 m_Class2; 
} 

public class Class2 
{ 
public Class2() 
    { 
    m_Int = 999; 
    m_Str = "sdfsdfsdsd"; 
    } 

public int getInt 
    { 
    get { return m_Int; } 
    set { m_Int = value; } 
    } 

public string getStr 
    { 
    get { return m_Str; } 
    set { m_Str = value; } 
    } 

private int  m_Int; 
private string m_Str; 
} 

生成されたXML:

<?xml version="1.0"?> 
<Class1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://xxx"> 
    <class2> 
    <getInt>999</getInt> 
    <getStr>sdfsdfsdsd</getStr> 
    </class2> 
</Class1> 
+0

あなたは 'using'ステートメントを使用する必要があります – SLaks

答えて

1

File.Createは、新しい空のファイルを作成します。
したがって、空のファイルを読み込んでいます。

おそらくFile.Openが必要です。

+0

私の愚かな方法!コピー&ペーストエラー。それを見てくれてありがとう! –

関連する問題