XElement和UTF-8问题

| 我有一个.NET Web服务(.asmx,而不是.svc),它通过HTTP POST接受字符串。它接受的字符串是我随后通过XElement.Parse解析的xml信息集。解析为XElement实例后,我将一个节点添加到实例中的元素之一。 我遇到的问题是,如果由于某种原因而出现了代表xml信息集的字符串,则由于某种原因,我将节点添加到元素XElement会引发异常,例如\“ \'\'(十六进制值0x06)是无效字符。第1行,位置40. \“。我收到各种各样的0x(*)错误。如果我不尝试将节点添加到XElement,一切都很好。这是我添加元素的方式:
var prospect = doc.Element(\"prospect\");
var provider = prospect.Element(\"provider\");

provider.Add(new XElement(\"id\",
    new XAttribute(\"reservation-code\",
    reservationCode)
));
我应该在某处进行某种字符串转换吗?
已邀请:
XML不允许某些Unicode字符。请参阅XML 1.0规范。不幸的是,也没有标准的方法可以将这些字符转义为XML。例如,由于格式正确的约束:合法字符(请参阅字符参考),因此无法使用XML1ѭ在有效XML中对其进行转义。
XElement.ToString()
选中了那些字符。但是,.NET确实提供了一种关闭字符检查的方法。在“ 3”个实例中,默认情况下处于禁用状态。因此,以下代码将起作用:
    /// <summary>
    /// Returns the XML string of the <paramref name=\"xElement\"/> WITHOUT CHARACTER CHECKING.
    /// </summary>
    /// <param name=\"xElement\"></param>
    /// <returns></returns>
    public static string ToStringWithoutCharacterChecking(this XElement xElement)
    {
        using (System.IO.StringWriter stringWriter = new System.IO.StringWriter())
        {
            using (System.Xml.XmlTextWriter xmlTextWriter = new XmlTextWriter(stringWriter))
            {
                xElement.WriteTo(xmlTextWriter);
            }
            return stringWriter.ToString();
        }
    }
但是请注意,如果使用
System.Xml.XmlWriterSettings
创建an3ѭ实例,则默认字符为
true
。因此,如果您使用
System.Xml.XmlWriterSettings
并想关闭字符检查,请使用:
XmlWriterSettings s = new XmlWriterSettings();
s.CheckCharacters = false;
using(XmlWriter w = XmlWriter.Create(..., s))
{
    //etc.
}
非常感谢,这在我使用linq到xsd时解决了我的问题。 这是我的代码: //不使用
container.Save(new StreamWriter(toStream, new UTF8Encoding(false)));
而不是使用代码:
using (XmlWriter w = XmlWriter.Create(new StreamWriter(toStream, new UTF8Encoding(false)), new XmlWriterSettings
            {//http://stackoverflow.com/questions/5709831/xelement-utf-8-issue
                //http://stackoverflow.com/questions/10057171/xdocument-prevent-invalid-charachters
                Indent = true,
                CheckCharacters = false
            }))
            {
                XTypedServices.Save(w, container.Untyped);
            }

            toStream.Flush();

要回复问题请先登录注册