2017-08-14 7 views
0

オブジェクトへのXMLをデシリアライズしようとしたとき、私は問題を抱えている、 私は、エラーメッセージエラーデシリアライズのXml - {<文字列のxmlnsは=「のhttp://tempuri.org/が」>期待されていなかった。}

に乗りました
"There is an error in XML document (2, 2)." 
のInnerExceptionで

Error Deserializing Xml to Object - xmlns='' was not expectedxmlns=''> was not expected. - There is an error in XML document (2, 2) while DeserializeXml to object

まだありませんR:私はこれらのリンクでトライソリューションを持って

"<string xmlns='http://tempuri.org/'> was not expected." 

私の問題をesolve ..ここ

が私のコードです:ここ

bulk_response result = ConvertXMLString.convertXMLStringToObject<bulk_response>(response); 

は私のデシリアライズコードです:

public static T convertXMLStringToObject<T>(string input) where T : class 
     { 
      try 
      { 
       System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(typeof(T)); 

       using (StringReader sr = new StringReader(input)) 
       { 
        return (T)ser.Deserialize(sr); 
        sr.Close(); 
       } 
      } 
      catch (Exception ex) 
      { 
       return null; 
      } 
     } 

、ここでは、私のクラスである:ある

public class bulk_response 
    { 
     public string status_code { get; set; } 
     public string status_text { get; set; } 
     public string transaction_id { get; set; } 
    } 

何私が見つけることができなかった問題?

更新: これは私がHTTP POSTレスポンスから取得したXMLです:

<?xml version="1.0" encoding="utf-8"?> 
<string xmlns="http://tempuri.org/"><?xml version="1.0" encoding="utf-16"?> 
<bulk_response xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <status_code>hansen</status_code> 
    <status_text>angie</status_text> 
    <transaction_id>ini testing aja</transaction_id> 
</bulk_response></string> 

、これは私がHTTPポストを介してデータを渡すと応答を取得する方法である:

HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create(destinationUrl); 
// add the parameters as key valued pairs making 
// sure they are URL encoded where needed 
ASCIIEncoding encoding = new ASCIIEncoding(); 
byte[] postData = encoding.GetBytes(param); 
httpReq.ContentType = "application/x-www-form-urlencoded"; 
httpReq.Method = "POST"; 
httpReq.ContentLength = postData.Length; 
// convert the request to a steeam object and send it on its way 
Stream ReqStrm = httpReq.GetRequestStream(); 
ReqStrm.Write(postData, 0, postData.Length); 
ReqStrm.Close(); 
// get the response from the web server and 
// read it all back into a string variable 
HttpWebResponse httpResp = (HttpWebResponse)httpReq.GetResponse(); 
StreamReader respStrm = new StreamReader(
httpResp.GetResponseStream()); 
string result = respStrm.ReadToEnd(); 
httpResp.Close(); 
respStrm.Close(); 

return result; 
+2

XML文書はどのようなものですか? –

+0

これはhttpの投稿応答から得られるXMLです:<?xml version = "1.0" encoding = "utf-8"?> <?xml version = "1.0" encoding = "utf-16"?> ハンセン アンジー INIテストAJA </TRANSACTION_ID> Hans

+1

コメントに詳細を追加しないでください、しかし**編集*あなたの質問 –

答えて

1

あなたがどのようにXMLをシリアル化しますか?それはかなり台無しに見えます。 <string>タグの後

  1. 追加<?xml ...は私には非常に奇妙に見えます。私はこれを見たことがない。これは有効なXMLですか?
  2. XMLからオブジェクトを逆シリアル化するとき、シリアライザは、ルートノードの名前がクラスのようになることを期待しています。
  3. ではなく bulk_response -tagを期待 status_textの終了タグがまったく終了タグはありません、 <status_text>angie</status_text>
  4. それは法的なXMLかどう異なるレベルのxmlns定義を持つことは(もまれであるべきである - これは<string> was not expected.が何を意味するのかでありますすべてで) - あなたがすべてでそれらを必要とする理由が、私は見ていない、あなただけの

<?xml version="1.0" encoding="utf-8"?> 
<bulk_response> 
    <status_code>hansen</status_code> 
    <status_text>angie</status_text> 
    <transaction_id>ini testing aja</transaction_id> 
</bulk_response> 

にあなたのXMLを簡素化した後、あなたのコードの作品、と言ったそれらを残すことができます 魔法のように。この問題は、デシリアライズコードではなく、サーバー側でのシリアライズコードと思われます。

+0

閉じるタグについては、それは私のタイプミスです。私の質問を更新してください...うーん、私は参照してください... – Hans

+0

私のコードは、私はhttpのポストの応答が正しいのですか? – Hans

関連する問題