2016-05-03 8 views
0

保険料課金エンジンのために多数のXSDファイルが提供されています - 巨大です - あなたが想像するように、 。しかし、私は成功したスキーマdefiniitionsに基づいてクラスを生成するためにXsd.exeではとxsd2codeを使用しました.NETでXSDから厳密に型指定された.NETリクエストオブジェクトを生成する方法

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> 

    <xs:complexType name="Vehicle"> 
     <xs:choice maxOccurs="unbounded"> 
      <xs:element name="ABICode" type="ABICode" minOccurs="0"/> 
      <xs:element name="ABSBrakes" type="ABSBrakes" minOccurs="0"/> 
      <xs:element name="AgedOver" type="AgedOver" minOccurs="0"/> 
      <xs:element name="AlarmSecurityFitted" type="AlarmSecurityFitted" minOccurs="0"/> 
      <xs:element name="AlarmSecurityMake" type="AlarmSecurityMake" minOccurs="0"/> 
      <xs:element name="AudioValue" type="AudioValue" minOccurs="0"/> 
      <xs:element name="CarPhoneValue" type="CarPhoneValue" minOccurs="0"/> 
      <xs:element name="Colour" type="Colour" minOccurs="0"/> 
      <xs:element name="CountryOfManufacture" type="CountryOfManufacture" minOccurs="0"/> 
      <xs:element name="CoverType" type="CoverType" minOccurs="0"/> 
      <xs:element name="CurrentMileage" type="CurrentMileage" minOccurs="0"/> 
      <xs:element name="Doors" type="Doors" minOccurs="0"/> 
      <xs:element name="EngineSize" type="EngineSize" minOccurs="0"/> 
      <xs:element name="EstimatedValue" type="EstimatedValue" minOccurs="0"/> 
      <xs:element name="Finish" type="Finish" minOccurs="0"/> 
      <xs:element name="FuelType" type="FuelType" minOccurs="0"/> 
      <xs:element name="HasSecurity" type="HasSecurity" minOccurs="0"/> 
      <xs:element name="ImmobSecurityFitted" type="ImmobSecurityFitted" minOccurs="0"/> 
      <xs:element name="ImmobSecurityMake" type="ImmobSecurityMake" minOccurs="0"/> 
      <xs:element name="Keeper" type="Keeper" minOccurs="0"/> 
      <xs:element name="Lhd" type="Lhd" minOccurs="0"/> 
      <xs:element name="Modified" type="Modified" minOccurs="0"/> 
      <xs:element name="NCBCountry" type="NCBCountry" minOccurs="0"/> 
      <xs:element name="NCBProtected" type="NCBProtected" minOccurs="0"/> 
      <xs:element name="NCBType" type="NCBType" minOccurs="0"/> 
      <xs:element name="NCBYears" type="NCBYears" minOccurs="0"/> 
      <xs:element name="NightLocation" type="NightLocation" minOccurs="0"/> 
      <xs:element name="Owner" type="Owner" minOccurs="0"/> 
      <xs:element name="OvernightPostCode" type="OvernightPostCode" minOccurs="0"/> 
      <xs:element name="PermittedDrivers" type="PermittedDrivers" minOccurs="0"/> 
      <xs:element name="PricePaid" type="PricePaid" minOccurs="0"/> 
      <xs:element name="PurchaseDate" type="PurchaseDate" minOccurs="0"/> 
      <xs:element name="Registration" type="Registration" minOccurs="0"/> 
      <xs:element name="Seats" type="Seats" minOccurs="0"/> 
      <xs:element name="TrackerSecurityFitted" type="TrackerSecurityFitted" minOccurs="0"/> 
      <xs:element name="TrackerSecurityMake" type="TrackerSecurityMake" minOccurs="0"/> 
      <xs:element name="Transmission" type="Transmission" minOccurs="0"/> 
      <xs:element name="Type" type="Type" minOccurs="0"/> 
      <xs:element name="Windscreen" type="Windscreen" minOccurs="0"/> 
      <xs:element name="YearManufacture" type="YearManufacture" minOccurs="0"/> 
      <xs:element name="Modification" type="Modification" minOccurs="0" maxOccurs="5"/> 
     </xs:choice> 
    </xs:complexType> 
</xs:schema> 

:有罪判決などなどを高速化者、住所、車、カーアラームは、ここでは、単一の複合型を含むサブセットです、生産されているクラスは、強く型付けされ、そしてこのようなオブジェクトの配列が含まれていません。

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.6.1064.2")] 
[System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
public partial class Vehicle 
{ 

    private object[] _items; 

    private ItemsChoiceType4[] _itemsElementName; 

    [System.Xml.Serialization.XmlElementAttribute("ABICode", typeof(string))] 
    [System.Xml.Serialization.XmlElementAttribute("ABSBrakes", typeof(ABSBrakes))] 
    [System.Xml.Serialization.XmlElementAttribute("AgedOver", typeof(string))] 
    [System.Xml.Serialization.XmlElementAttribute("AlarmSecurityFitted", typeof(AlarmSecurityFitted))] 
    [System.Xml.Serialization.XmlElementAttribute("AlarmSecurityMake", typeof(AlarmSecurityMake))] 
    [System.Xml.Serialization.XmlElementAttribute("AudioValue", typeof(string))] 
    [System.Xml.Serialization.XmlElementAttribute("CarPhoneValue", typeof(string))] 
    [System.Xml.Serialization.XmlElementAttribute("Colour", typeof(Colour))] 
    [System.Xml.Serialization.XmlElementAttribute("CountryOfManufacture", typeof(CountryOfManufacture))] 
    [System.Xml.Serialization.XmlElementAttribute("CoverType", typeof(CoverType))] 
    [System.Xml.Serialization.XmlElementAttribute("CurrentMileage", typeof(string))] 
    [System.Xml.Serialization.XmlElementAttribute("Doors", typeof(string))] 
    [System.Xml.Serialization.XmlElementAttribute("EngineSize", typeof(string))] 
    [System.Xml.Serialization.XmlElementAttribute("EstimatedValue", typeof(string))] 
    [System.Xml.Serialization.XmlElementAttribute("Finish", typeof(Finish))] 
    [System.Xml.Serialization.XmlElementAttribute("FuelType", typeof(FuelType))] 
    [System.Xml.Serialization.XmlElementAttribute("HasSecurity", typeof(HasSecurity))] 
    [System.Xml.Serialization.XmlElementAttribute("ImmobSecurityFitted", typeof(ImmobSecurityFitted))] 
    [System.Xml.Serialization.XmlElementAttribute("ImmobSecurityMake", typeof(ImmobSecurityMake))] 
    [System.Xml.Serialization.XmlElementAttribute("Keeper", typeof(Keeper))] 
    [System.Xml.Serialization.XmlElementAttribute("Lhd", typeof(Lhd))] 
    [System.Xml.Serialization.XmlElementAttribute("Modification", typeof(Modification))] 
    [System.Xml.Serialization.XmlElementAttribute("Modified", typeof(Modified))] 
    [System.Xml.Serialization.XmlElementAttribute("NCBCountry", typeof(NCBCountry))] 
    [System.Xml.Serialization.XmlElementAttribute("NCBProtected", typeof(NCBProtected))] 
    [System.Xml.Serialization.XmlElementAttribute("NCBType", typeof(NCBType))] 
    [System.Xml.Serialization.XmlElementAttribute("NCBYears", typeof(string))] 
    [System.Xml.Serialization.XmlElementAttribute("NightLocation", typeof(NightLocation))] 
    [System.Xml.Serialization.XmlElementAttribute("OvernightPostCode", typeof(string))] 
    [System.Xml.Serialization.XmlElementAttribute("Owner", typeof(Owner))] 
    [System.Xml.Serialization.XmlElementAttribute("PermittedDrivers", typeof(PermittedDrivers))] 
    [System.Xml.Serialization.XmlElementAttribute("PricePaid", typeof(string))] 
    [System.Xml.Serialization.XmlElementAttribute("PurchaseDate", typeof(string))] 
    [System.Xml.Serialization.XmlElementAttribute("Registration", typeof(string))] 
    [System.Xml.Serialization.XmlElementAttribute("Seats", typeof(string))] 
    [System.Xml.Serialization.XmlElementAttribute("TrackerSecurityFitted", typeof(TrackerSecurityFitted))] 
    [System.Xml.Serialization.XmlElementAttribute("TrackerSecurityMake", typeof(TrackerSecurityMake))] 
    [System.Xml.Serialization.XmlElementAttribute("Transmission", typeof(Transmission))] 
    [System.Xml.Serialization.XmlElementAttribute("Type", typeof(string))] 
    [System.Xml.Serialization.XmlElementAttribute("Windscreen", typeof(Windscreen))] 
    [System.Xml.Serialization.XmlElementAttribute("YearManufacture", typeof(string))] 
    [System.Xml.Serialization.XmlChoiceIdentifierAttribute("ItemsElementName")] 
    public object[] Items 
    { 
     get 
     { 
      return this._items; 
     } 
     set 
     { 
      this._items = value; 
     } 
    } 

理想的には私は私がするように他のクラスのインスタンスであるプロパティの数を持っているVehicleクラスを希望しますオートマトンを使用して、自分のドメインモデルからリクエストオブジェクトにマッピングし、XMLにシリアライズしてリクエストを送信できます。

しかし、これらの型が作成された方法では、ビルドする必要のある要求オブジェクトの構造に関する情報が失われています。すべてを明示的にプロパティごとにマップする必要があります。それでも、xsd2codeのすべての設定とxsd.exeのスイッチを操作しているにもかかわらず、私が望むようなものを生成することはできません。

私がしたいことをする方法はありますか、私のアプローチを変更する必要はありますか?

答えて

0

私は同様の作業を行い、xsd.exeを使用しましたが、この場合、問題はスキーマがレイアウトされている方法だと思います。 Vehicleノードは、40種類のオブジェクト(ABSBrakes、AgedOver ... YearManufacture)のいずれか1つになる要素の無制限のリストです。スキーマの作成者は、プロパティごとにプロパティをマップする以外の選択肢はありませんでした。

私はそれがあなたが聞きたいものではないが、フロントガラスのデータを見つけたらWindscreenオブジェクトを作成し、それをVehicle.Itemsに追加して、それぞれのプロパティについて続行します。これをシリアル化すると、指定されたスキーマに一致する有効なXMLが作成されます。

関連する問題