2014-11-11 2 views
0

У меня есть wcf, обрабатывающий XML и возвращающий ответ (как XML) клиенту. Это метод, возвращающий ответ.Избавьтесь от дополнительных in DataContractSerializer

public string ProcessXML(CommonLibrary.Model.TransferData dto, bool Authenticated) 
    { 

     DataContractSerializer dcs = new DataContractSerializer(typeof(ResponseBack)); 
     MemoryStream ms = new MemoryStream(); 

     utility.utilities utl = new utility.utilities(); 


     string XMLErrMessage = string.Empty; 

     if (Authenticated) 
     { 

      if (!string.IsNullOrEmpty(dto.xml)) 
      { 
       XMLErrMessage = utl.validateXML(dto.xml, xsdFilePath, currentSchema); 

       if (string.IsNullOrEmpty(XMLErrMessage)) 
       { 
        dcs.WriteObject(ms, new ResponseBack() { StatusCode = 101, StatusDescription = "Success" }); 

        ms.Position = 0; 
       } 
       else 
       { 


        dcs.WriteObject(ms, new ResponseBack() { StatusCode = 201, StatusDescription = "XML Validation Fails" }); 
        ms.Position = 0; 
       } 


      } 

     } 
     else 
     { 


      dcs.WriteObject(ms, new ResponseBack() { StatusCode = 401, StatusDescription = "Authentication Fails" }); 
      ms.Position = 0; 

     } 

     string s = new StreamReader(ms).ReadToEnd(); // xml result 

     return s; 
    } 

Я тестирую этот метод, и я получаю 3 xmls taht, возвращающийся в s.

XML # 1:

<ResponseBack xmlns=\"http://schemas.datacontract.org/2004/07/CommonLibrary.Model\"    xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\"><StatusCode>401</StatusCode><StatusDescription> 
Authentication Fails</StatusDescription</ResponseBack> 

XML # 2:

<ResponseBack xmlns=\"http://schemas.datacontract.org/2004/07/CommonLibrary.Model\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\"><StatusCode>101</StatusCode><StatusDescription>Success</StatusDescription></ResponseBack> 

XML # 3:

<ResponseBack xmlns="http://schemas.datacontract.org/2004/07/CommonLibrary.Model" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><StatusCode>201</StatusCode><StatusDescription>XML Validation Fails</StatusDescription></ResponseBack> 

, если вы посмотрите на XML # 1 и # 2 есть один extra \ перед xmls, как я могу избавиться от этого: xmlns = \ "http://schemas.datac

Решение: Я смотрел результат в режиме отладки в visual studio, поэтому он показывал лишние/когда я распечатываю результат в текстовом поле, это нормально.

ответ

2

Я на 100% уверен, что DataContractSerializer не производит эти обратные косые черты. Либо вы смотрите на свои значения в часах Visual Studio, что делает escape-строки в соответствии с синтаксисом C#, либо какая-то другая часть вашей программы изменяет XML.

+0

На самом деле, я смотрю на ценность в визуальной студии, поставив точки останова и наведя на нее курсор. Но, как вы видите в XML # 3, этого нет. Поскольку я рассматриваю их все одинаково. – Alma

+0

Я думаю, может быть, я должен внести изменения в MemoryStream. не знакомы с этим. – Alma

+0

Пожалуйста, создайте Console.WriteLine (ы) в конце вашего метода, который будет печатать XML без каких-либо изменений. Если вы посмотрите на часы VS, то там будут помещены обратные косые черты, чтобы сделать его допустимым строковым литералом, например. строка 'aa 'bb' отображается как строковый литерал' 'aa \" bb ". Но вы можете использовать текстовый или XML-визуализатор или скопировать исходное значение, которое все работает по-разному. – fejesjoco

Смежные вопросы