В настоящее время я пытаюсь сериализовать класс в XML, который будет опубликован в веб-службе php.
Всякий раз, когда я делал обычную сериализацию с использованием XMLSerializer, объявление XML всегда появляется в первой строке документа XML (аналогично <?xml....?>
). Я протестировал XML и не смог заставить его работать, потому что конечная точка не принимает декларацию XML, и я ничего не могу с этим поделать. Честно говоря, я не знаком с XML Serialization в С#.
Поэтому я использовал XMLWriter для этого, как показано ниже:
private string SerializeClassToString(GetRiskReport value)
{
var emptyNS = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
var ser = new XmlSerializer(value.GetType());
var settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;
using (var stream = new StringWriter())
{
using (var writer = XmlWriter.Create(stream, settings))
{
ser.Serialize(writer, value, emptyNS);
return stream.ToString();
}
}
}
Результатом для пространства имен является
<GetRiskReport FCRA=\"false\" ReturnResultsOnly=\"false\" Monitoring=\"false\">
... и я могу опустить XML-декларацию, но меня вводят с двумя новыми проблемами.
Я получил \r\n
для новой строки, и у меня есть двойная кавычка, такая как ReturnResultsOnly=\"false\" Monitoring=\"false\"
которая также не может обрабатываться конечной точкой.
Я хотел бы спросить, что кто-нибудь может дать мне представление о том, как изменить XmlWriterSetting, чтобы опустить XML-декларацию, избегать \r\n
а также избегать экранированных двойных кавычек \"
Спасибо за ваш совет заранее.
Саймон
Попробуйте следующие настройки
settings.NewLineHandling = NewLineHandling.None;
settings.CheckCharacters = false;
"
символ должен быть экранированы , как"
. Когда Visual Studio отображает строки для вас это„ услужливо“убегает кавычки , чтобы увидеть строки без этого эффекта, попробуйте ввестиDebug.WriteLine(xml)
в непосредственное окно.<GetRiskReport FCRA=\"false\" ReturnResultsOnly=\"false\" Monitoring=\"false\">
и я ожидаю<GetRiskReport FCRA="false" ReturnResultsOnly="false" Monitoring="false">
Извините, если я использую неправильный термин.