2016-07-25 12 views
1

私のWebサービスは、オブジェクトをXMlシリアライザに使用してXMLにフォーマットされたjson文字列を与えています。XMLへのJSON応答文字列を解析できません

public static string ObjectToXmlString(this Object obj) 
    { 
     string xmlStr = string.Empty; 
     XmlSerializer xs = new XmlSerializer(obj.GetType()); 
     XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); 
     ns.Add("", ""); 
     using (MemoryStream memoryStream = new MemoryStream()) 
     { 
      XmlWriterSettings settings = new XmlWriterSettings() 
      { 
       Encoding = Encoding.UTF8, 
       Indent = false, 
       OmitXmlDeclaration = true, 
       NewLineChars = string.Empty, 
       NewLineHandling = NewLineHandling.None 
      }; 
      using (XmlWriter writer = XmlWriter.Create(memoryStream, settings)) 
      { 
       xs.Serialize(writer, obj,ns); 
      } 
      return Encoding.UTF8.GetString(memoryStream.ToArray()).Replace("\"", string.Empty); 
     } 
    } 

サービス応答:私の応答に似ている

"<ArrayOfOwnerShipDetails><OwnerShipDetails><OwnerShipId>80932</OwnerShipId><FileNumber>rp1144</FileNumber><Salutation>Mr</Salutation><OwnerFirstName>Jai Kumar Datwni ji</OwnerFirstName><OwnerMiddleName /><OwnerLastName /><ResidentialAddress>1159 Sec 18 C,c Hd</ResidentialAddress><EmailID /><MobileNumber /><VoterID /><AadharCardNo /><RelationCode>S</RelationCode><RelationDescription>Son of</RelationDescription><FatherOrHusbandName>Lachman Dass S</FatherOrHusbandName><PropertyShareInPercentage>50.00</PropertyShareInPercentage><AdditionalRemarks /></OwnerShipDetails></ArrayOfOwnerShipDetails>" 

しかし、私は私のサービスを呼び出しています、他のアプリケーションにこのJSONレスポンスを解析しようとします。

using (var client = new HttpClient()) 
       { 
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml")); 
        var response = client.GetAsync("http://localhost:50429/api/Haris/GetOwnersByFileNo?fileNo=RP1144").Result; 

        if (response.IsSuccessStatusCode) 
        { 
         // by calling .Result you are performing a synchronous call 
         var responseContent = response.Content; 

         // by calling .Result you are synchronously reading the result 
         string responseString = responseContent.ReadAsStringAsync().Result.Trim(); 


         // Create the XmlDocument. 
         XmlDocument doc = new XmlDocument(); 
         **doc.LoadXml(responseString); ---> Error Comes here** 


        } 
       } 

それはデータルートレベルのエラー が無効で提供します。行1、位置1

しかし、私はメモ帳と同じ応答をコピーし、実行時に変数に貼り付けてもうまく動作します。 jsonの文字列に二重引用符が間違っていますか?

ここから手伝ってください。

答えて

0

代わりにLoad()メソッドを使用すると、問題は解決します。私は完璧にフィット、この解決策を見つけた。この後

string sb = responseString; 
         sb = responseString.Replace("\"", string.Empty).Trim().ToString().Trim(); 
         var a = GenerateStreamFromString(sb); 
         StreamReader reader = new StreamReader(a); 
         string text = reader.ReadToEnd(); 
         XmlDocument doc = new XmlDocument(); 
         doc.LoadXml(responseString); 

See more

は、そうでない場合

doc.LoadXml(responsestring.Substring(responsestring.IndexOf(Environment.NewLine))); 

Live Demo

+0

私はこれを試しましたが、両方ともエラーが発生します:.Load()は---パスに不正な文字を返します。 (StartIndexはゼロより小さくなることはできません。パラメータ名:startIndex ") – Gerry

+0

xmlの前に@を使用して読み込みます。 – Developer

+0

before xml string .Load()に渡していますか? – Gerry

関連する問題