使用具有外部xmlns引用的XmlSerializer进行反序列化

时间:2012-10-08 11:52:39

标签: c# xml serialization xsitype

我需要阅读越来越多的XML格式的BCP(t-sql)格式文件。我使用xsd.exe和一些BCP格式文件创建xsd文件,并尝试将xml文件作为对象读取。但它失败了:

未处理的异常:System.InvalidOperationException:XMLdocument(4,6)中存在错误。 ---> System.InvalidOperationException:无法识别指定的类型:name ='CharTerm',namespace ='http://schemas.microsoft.com/sqlserver/2004/bulkload/format',at。

XML文件是这样的:

<?xml version="1.0" encoding="utf-8" ?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <RECORD>
    <FIELD ID="1" xsi:type="CharTerm" TERMINATOR=";" MAX_LENGTH="32"/>
    <FIELD ID="2" xsi:type="CharTerm" TERMINATOR=";" MAX_LENGTH="4"/>
    <FIELD ID="3" xsi:type="CharTerm" TERMINATOR=";" MAX_LENGTH="4"/>
    <FIELD ID="4" xsi:type="CharTerm" TERMINATOR=";" MAX_LENGTH="20"/>
    <FIELD ID="5" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="16"/>
  </RECORD>
  <ROW>
    <COLUMN SOURCE="1" NAME="col1" xsi:type="SQLNVARCHAR"/>
    <COLUMN SOURCE="2" NAME="col2" xsi:type="SQLINT"/>
    <COLUMN SOURCE="3" NAME="col3" xsi:type="SQLINT"/>
    <COLUMN SOURCE="4" NAME="col4" xsi:type="SQLNVARCHAR"/>
    <COLUMN SOURCE="5" NAME="col5" xsi:type="SQLFLT4"/>
  </ROW>
</BCPFORMAT>

我读了这样的XML文件:

        FileStream fs = File.OpenRead(formatFileName);
        XmlSerializer serializer = new XmlSerializer(typeof(FormatSchemasXml.BCPFORMAT));
        FormatSchemasXml.BCPFORMAT bcp_format = (FormatSchemasXml.BCPFORMAT)serializer.Deserialize(fs);
        fs.Close();

似乎没有使用外部xmlns引用。我已经搜索了很多文档,但看不出我如何解决这个问题就失败了。最好不必修改BCP XML格式文件(我想按原样使用它们)。

建议?

0 个答案:

没有答案