我有如下所示的XML文件。当我在VS2008中查看它时,Intellisense不会报告任何错误。但是,当我尝试使用XmlSerializer.Deserialize解析它时,我得到了异常:
未识别指定的类型: 名称= UTCTimeStamp_t', 命名空间= 'http://www.fixprotocol.org/ATDL-1-1/Core', 在<参数 的xmlns = 'http://www.fixprotocol.org/ATDL-1-1/Core' >
(违规的xsi:Type,“UTCTimeStamp_t”,在引用的XSD文件中定义,如XML所示。)
为什么XmlSerializer拒绝XML,即使Intellisense显示它是有效的? (我仔细检查了两者都得到了XSD文件的相同副本。)
我可以进行更改,或者我可以应用解决方法来解析它吗?
注意:我在Silverlight3中执行此操作 - 该版本的序列化程序是否有任何特殊限制?
这是XML:
<?xml version="1.0" encoding="utf-8"?>
<Strategies
xmlns="http://www.fixprotocol.org/ATDL-1-1/Core"
xmlns:core="http://www.fixprotocol.org/ATDL-1-1/Core"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xsi:schemaLocation="http://www.fixprotocol.org/ATDL-1-1/Core http://www.myserver.com/atdl-core-1-1.xsd"
strategyIdentifierTag="7620"
>
<Strategy name="Tazer1" uiRep="Tazer" wireValue="Tazer" version="1" fixMsgType="D" providerID="ABC">
<Parameter name="StartTime" xsi:type="core:UTCTimeStamp_t" fixTag="7602" use="required" localMktTz="America/New_York">
<Description>Strategy Start Time</Description>
</Parameter>
</Strategy>
</Strategies>
以下是XSD文件的片段:
<xs:complexType name="UTCTimeStamp_t">
<xs:complexContent>
<xs:extension base="core:Parameter_t">
<xs:attribute name="minValue" type="core:UTCTimeStamp"/>
<xs:attribute name="maxValue" type="core:UTCTimeStamp"/>
<xs:attribute name="dailyMinValue" type="core:LocalMktTime"/>
<xs:attribute name="dailyMaxValue" type="core:LocalMktTime"/>
<xs:attribute name="localMktTz" type="xs:string">
<xs:annotation>
<xs:documentation>
These string values must correspond to time zone values from the zoneinfo database,
also known as the tz database.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="constValue" type="core:UTCTimeStamp"/>
<xs:attribute name="dailyConstValue" type="core:LocalMktTime"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
答案 0 :(得分:2)
XmlSerializer
不关心类型的XML Schema定义 - 它关心的只是类型的名称,以及映射到它的类声明。如果不查看您尝试反序列化的类的定义,并且完成XML序列化属性,就不可能说出问题所在。