gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 23:23:44 28 4
gpt4 key购买 nike

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

我的代码如下:

  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, Level 16, State 1, Line 4XML 解析:第 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com