Избегайте двойных кавычек XML Escape

1

В настоящее время я пытаюсь сериализовать класс в 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 а также избегать экранированных двойных кавычек \"

Спасибо за ваш совет заранее.

Саймон

  • 0
    Не могли бы вы привести воспроизводимый пример того, что вы подразумеваете под "избежавшими двойных кавычек"? Когда внутри строки XML цитата " символ должен быть экранированы , как &quot; . Когда Visual Studio отображает строки для вас это„ услужливо“убегает кавычки , чтобы увидеть строки без этого эффекта, попробуйте ввести Debug.WriteLine(xml) в непосредственное окно.
  • 0
    @dbc у меня есть пространство имен, такое как <GetRiskReport FCRA=\"false\" ReturnResultsOnly=\"false\" Monitoring=\"false\"> и я ожидаю <GetRiskReport FCRA="false" ReturnResultsOnly="false" Monitoring="false"> Извините, если я использую неправильный термин.
Показать ещё 1 комментарий
Теги:

1 ответ

1
Лучший ответ

Попробуйте следующие настройки

settings.NewLineHandling = NewLineHandling.None;
settings.CheckCharacters = false;
  • 0
    setting.NewLineHandling = NewLineHandling.None работает. Однако избежать двойных кавычек все еще проблема :(
  • 0
    Я думаю, что двойная кавычка не должна быть проблемой здесь. Поскольку вы можете проверять значение строки в отладчике, вы увидите эти escape-символы. Попробуйте записать строку вывода в файл и посмотрите, как это получается. Это должно быть хорошо.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню