2016-07-05 61 views
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並沒有得到任何東西。

+0

你需要UTF-16?你可以使用utf-8嗎? – jdweng

+0

您可以嘗試打印xml或在過程中的臨時表中插入xml嗎?好奇的是,第1行char xml字符串包含的內容。37.看起來像第一行中的最後一個字符。也許是一個不好的換行符。 –

+0

您能否給我們提供您傳遞給ToXML的類定義?另外,如何將XmlDocument轉換爲字符串,然後將它傳遞給存儲過程,您是否使用XmlDocument.Save? –

回答