У меня есть 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, поэтому он показывал лишние/когда я распечатываю результат в текстовом поле, это нормально.
На самом деле, я смотрю на ценность в визуальной студии, поставив точки останова и наведя на нее курсор. Но, как вы видите в XML # 3, этого нет. Поскольку я рассматриваю их все одинаково. – Alma
Я думаю, может быть, я должен внести изменения в MemoryStream. не знакомы с этим. – Alma
Пожалуйста, создайте Console.WriteLine (ы) в конце вашего метода, который будет печатать XML без каких-либо изменений. Если вы посмотрите на часы VS, то там будут помещены обратные косые черты, чтобы сделать его допустимым строковым литералом, например. строка 'aa 'bb' отображается как строковый литерал' 'aa \" bb ". Но вы можете использовать текстовый или XML-визуализатор или скопировать исходное значение, которое все работает по-разному. – fejesjoco