xsd.exe为XML序列化生成奇怪的C#类
我在.xdr文件中有一个XML模式。这是此文件的缩短版本(仅举个例子):xsd.exe为XML序列化生成奇怪的C#类,c#,xml,serialization,xsd,xsd.exe,C#,Xml,Serialization,Xsd,Xsd.exe,我在.xdr文件中有一个XML模式。这是此文件的缩短版本(仅举个例子): <?xml version = "1.0" encoding = "WINDOWS-1252"?> <Schema name = "ANS.xdr" xmlns = "urn:schemas-microsoft-com:xml-data" xmlns:dt = "urn:schemas-microsoft-com:datatypes"> <ElementType name = "
<?xml version = "1.0" encoding = "WINDOWS-1252"?>
<Schema name = "ANS.xdr"
xmlns = "urn:schemas-microsoft-com:xml-data"
xmlns:dt = "urn:schemas-microsoft-com:datatypes">
<ElementType name = "Shipment" content = "eltOnly" order = "seq" model = "closed">
<element type = "TrackingNumber" minOccurs = "0" maxOccurs = "1"/>
</ElementType>
<ElementType name = "TrackingNumber" content = "textOnly" dt:type = "string" model = "closed"/>
</Schema>
问题是,xsd.exe
将架构名称的前缀添加到类名中:公共部分类ANSxdrShipment
其中应该是Shipment
。序列化后会导致错误的标记名称:
<?xml version="1.0" encoding="utf-8"?>
<ANSxdrShipment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<TrackingNumber>PN-34-23414</TrackingNumber>
</ANSxdrShipment>
PN-34-23414
我可以手动更正,但当存在嵌入式ElementTypes时,问题似乎会聚集起来。它会导致超长名称,尤其是在复杂模式中,例如:
OpenShipmentsxdrOpenShipmentsOpenShipmentShipmentReturnNotificationDetailsReturnNotificationNotificationEMailAddress
正在序列化部分节点。如果从根节点序列化,则应该
<?xml version="1.0" encoding="utf-8"?>
<ANSxdr xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Shipment>
<TrackingNumber>PN-34-23414</TrackingNumber>
</Shipment>
</ANSxdr>
-这家伙还解释了根据您的喜好定制代码生成的方法
<?xml version="1.0" encoding="utf-8"?>
<ANSxdrShipment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<TrackingNumber>PN-34-23414</TrackingNumber>
</ANSxdrShipment>
<?xml version="1.0" encoding="utf-8"?>
<ANSxdr xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Shipment>
<TrackingNumber>PN-34-23414</TrackingNumber>
</Shipment>
</ANSxdr>