c# - StringWriter.ToString() 正在破坏 xml C#

标签 c# xml parsing escaping

我有一个类数组,我将把它传递给 XML,以便稍后将其发送给 SQL Server 存储过程。 问题是,当我执行 StringWriter 时,它会添加一些出现在最终 XML 中的 scape 字符 (=\)。

我的代码如下:

  public XmlDocument ToXML(object obj_to_xml)
{
    string str_XML;
    XmlDocument xml = new XmlDocument();
    var stringwriter = new System.IO.StringWriter();
    var serializer = new XmlSerializer(obj_to_xml.GetType());
    serializer.Serialize(stringwriter, obj_to_xml);**

    //at this point the format is correct, for example stringwriter contains: 
<?xml version="1.0" encoding="utf-16"?>
<ArrayOfRegistroPrestamo xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <RegistroPrestamo>
    <Id>1</Id>
    <Cedula>8-834-789</Cedula>
    <Nombre>Amarillos</Nombre>
    <Apellido>Perez</Apellido>
  </RegistroPrestamo>
  <RegistroPrestamo>
    <Id>0</Id>
    <Cedula />
    <Nombre />
    <Apellido />
  </RegistroPrestamo>
</ArrayOfRegistroPrestamo>

    //the problem comes with this line

    xml.LoadXml(stringwriter.ToString());

    //final XML looks like this: 
<?xml version=\"1.0\" encoding=\"utf-16\"?>
<ArrayOfRegistroPrestamo xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">
  <RegistroPrestamo>
    <Id>1</Id>
    <Cedula>8-834-789</Cedula>
    <Nombre>Amarillos</Nombre>
    <Apellido>Perez</Apellido>
  </RegistroPrestamo>
  <RegistroPrestamo>
    <Id>0</Id>
    <Cedula />
    <Nombre />
    <Apellido />
  </RegistroPrestamo>
</ArrayOfRegistroPrestamo>

    return xml;
}

当 SQL Server 尝试解析 XML 代码时:

cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "P_Save_Procedure";
cmd.Parameters.Add("@Registros", SqlDbType.Xml).Value = xml;

存储过程文本

Create procedure [dbo].[P_Save_Procedure]
(@Registros as xml)
as
begin
    select distinct 'Id' = x.v.value('Id[1]', 'Int')
    from @Registros.nodes('/ArrayOfRegistroPrestamo/RegistroPrestamo') x(v)
end

我收到错误:

男士。 9413,16 层,州 1,4 号线 XML解析:第1行,第37个字符;它需要一个字符串文字

如果我使用正确版本的 XML 手动调用 SP:

<?xml version="1.0" encoding="utf-16"?>
<ArrayOfRegistroPrestamo xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <RegistroPrestamo>
    <Id>1</Id>
    <Cedula>8-834-789</Cedula>
    <Nombre>Amarillos</Nombre>
    <Apellido>Perez</Apellido>
  </RegistroPrestamo>
  <RegistroPrestamo>
    <Id>0</Id>
    <Cedula />
    <Nombre />
    <Apellido />
  </RegistroPrestamo>
</ArrayOfRegistroPrestamo>

结果是预期的。

已经花了 2 天的时间试图找到一种方法来获取 XML 的正确语法,但一无所获。

最佳答案

关于c# - StringWriter.ToString() 正在破坏 xml C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38196532/

相关文章:

c# - 你调用的对象是空的

html - 使用 XSLT 将第一个 HTML 表格行转换为每个表格的标题行

c++ - QXmlStreamReader.readNextStartElement() 两次读取起始元素

用于替换 C 文件中的#define 值的 Python 脚本

regex - Vim 正则表达式 : overwritten back references?

C# : Static Members in Base Class

c# - 从查询中选择相关实体而不是主要实体

c# - 在 C# 中评估特殊表达式

c# - 如何处理linq中的空值?

javascript - ionic 版本和android-versionCode之间的区别?