xsd.exe为XML序列化生成奇怪的C#类

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 = "

我在.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 = "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>