2017-10-09 16 views
0

投稿httpリクエストを介してxmlを送信するアプリケーションをテストする必要があります。だから、私はそれを自分に送り、deserealizeしようとします。私は "XML文書(1、2)にエラーがあります。"私は受け取ったXML文字列でXmlDocumentを作成することができるので、XMLは正しいです。私は別のソースからスキーマを作成した、つまり、XML用のクラスを別のアプリケーションにコピーし、そのアプリケーションを使用してスキーマを作成した後、このスキーマからクラスを作成したため、例外が発生すると思います。今、私はHTTP経由でxmlを受信し、それをdeserealizeしようとし、そこに生成されたクラスをコピーした単純なサーバーを作成しました。c#xmlをオブジェクトに逆シリアル化する際のエラー

static void Main(string[] args) 
     { 
      HttpListener listener = new HttpListener(); 
      listener.Prefixes.Add(@"http://127.0.0.1:123/ololo/"); 
      listener.Start(); 
      var context = listener.GetContext(); 
      var xmlstring = string.Empty; 

      using (var sr = new StreamReader(context.Request.InputStream)) 
      { 
       xmlstring = sr.ReadToEnd(); 
      } 
      XmlDocument xmlka = new XmlDocument(); 
      xmlka.LoadXml(xmlstring); 
      XmlSerializer serializer = new XmlSerializer(typeof(XmlData)); 
      MemoryStream memStream = new MemoryStream(Encoding.UTF8.GetBytes(xmlstring)); 
      try 
      { 
       XmlData resultingMessage = (XmlData)serializer.Deserialize(memStream); 
      } 
      catch(Exception ex) 
      { 

      } 
     } 

スタックトレース:

at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events) 
    at System.Xml.Serialization.XmlSerializer.Deserialize(Stream stream) 
    at ConsoleApplication1.Program.Main(String[] args) in c:\\users\\jamil\\documents\\visual studio 2015\\Projects\\ConsoleApplication1\\ConsoleApplication1\\Program.cs:line 45 

のInnerExceptionメッセージ:

<XmlData xmlns='http://schemas.datacontract.org/2004/07/Common.Util'> was not expected. 

生成されたクラスのすべてのインデックスは次のようになります。

私を混乱させる何
// <auto-generated> 
    //  This code was generated by a tool. 
    //  Runtime Version:4.0.30319.42000 
    // 
    //  Changes to this file may cause incorrect behavior and will be lost if 
    //  the code is regenerated. 
    // </auto-generated> 
    //------------------------------------------------------------------------------ 

    // 
    // This source code was auto-generated by xsd, Version=4.6.1055.0. 
    // 


    /// <remarks/> 
    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] 
    [System.SerializableAttribute()] 
    [System.Diagnostics.DebuggerStepThroughAttribute()] 
    [System.ComponentModel.DesignerCategoryAttribute("code")] 
    [System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = true)] 

ここではコードですこれについては、Namespace = 「」

+2

あなたのXMLファイルを貼り付けます。 – Aybe

+0

'program.cs'の45行目は何ですか? –

+0

@Ivan、XmlData resultsMessage =(XmlData)serializer.Deserialize(memStream); – Jamil

答えて

1

あなたは、ルートクラスXmlDataで名前空間を追加しようとすることができます:

[XmlRoot(ElementName = "XmlData", Namespace = "http://schemas.datacontract.org/2004/07/Common.Util")] 
+0

ありがとう、それは働いた。しかし、どのように.xsdファイルに名前空間を含めることができますか? – Jamil

+0

名前空間を持つxmlファイルがある場合は、 'xsd xmldata.xml'を使用して' .xsd'ファイルを作成します – PinBack

+0

いいえ、ガイドに従って、クラスを含む.dllファイルを作成してから、xsd myfile.dll、 xsd schema0.xsd/classes – Jamil

関連する問題