2
我有一個類數組,我將傳遞給XML以稍後將其發送到SQL Server存儲過程。 問題是,當我執行StringWriter時,它會添加一些出現在最終XML中的scape字符(= \)。StringWriter.ToString()正在破解xml C#
我的代碼如下:
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
我得到了錯誤:
Me納秒。 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的sintax並沒有得到任何東西。
你需要UTF-16?你可以使用utf-8嗎? – jdweng
您可以嘗試打印xml或在過程中的臨時表中插入xml嗎?好奇的是,第1行char xml字符串包含的內容。37.看起來像第一行中的最後一個字符。也許是一個不好的換行符。 –
您能否給我們提供您傳遞給ToXML的類定義?另外,如何將XmlDocument轉換爲字符串,然後將它傳遞給存儲過程,您是否使用XmlDocument.Save? –