簡體   English   中英

避免 XML Escape 雙引號

[英]Avoid XML Escape Double Quote

我目前正在嘗試將 class 序列化為 XML 以發布到 php Z2567A5EC9705EB7AC2DZ98403 服務。

每當我使用 XMLSerializer 進行正常序列化時,XML 聲明總是出現在 XML 文檔的第一行(類似於<?xml....?> )。 我測試了 XML 並且無法讓它工作,因為端點不接受 XML 聲明,我對此無能為力。 老實說,我不熟悉 C# 中的 XML 序列化。

因此,我使用 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;
private void SerializeClassToString(GetRiskReport value)
{
    var emptyNS = new XmlSerializerNamespaces(new[]{XmlQualifiedName.Empty});
    var ser = new XmlSerializer(value.GetType());
    var settings = new XmlWriterSettings();
    settings.OmitXmlDeclaration = true;

string path = 'your_file_path_here'
if (File.Exists(path)) File.Delete(path);
FileStream stream = File.Create(path);
using (var writer = XmlWriter.Create(stream, settings))
    {
        ser.Serialize(writer, value, emptyNS);
        return;
    }
}

沒有辦法避免 ms 錯誤或他們關於 xmlserializing 的內在規范。使用文件流 object 更容易和更快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM