2016-06-01 4 views
0

私は、Web APIで次のXMLをデータバインドしようとしています:アプリケーション/ XMLをクラスにクラスにWebApi/DataBind:データバインディングのXMLとクラスモデルの仕組みは?

<COMPANY> 
    <PROPERTIES> 
    <DATASOURCE>UXXI</DATASOURCE> 
    <DATETIME>2012-07-11T11:18:12</DATETIME> 
    </PROPERTIES> 
    <PERSON recstatus="1"> 
    <SOURCEDID> 
     <SOURCE>U123XXI</SOURCE> 
     <ID>usuario26</ID> 
    </SOURCEDID> 
    <USERID password="123456">usuario26</USERID> 
    <NAME> 
     <FN>Usuario Prueba 26</FN> 
     <PI> 
     <FAMILY>Prueba 26</FAMILY> 
     <GIVEN>Usuario</GIVEN> 
     <EMAIL>[email protected]</EMAIL> 
     </PI> 
    </NAME> 
    </PERSON> 
</COMPANY> 

public class COMPANY { 
    public class PROPERTIES { 
     public string DATASOURCE { get; set; } 
     public string MYDATE { get; set; } 
    } 

    public class PERSON { 
     public string recstatus { get; set; } 

     public class SOURCEID { 
      public string SOURCE { get; set; } 
      public string ID { get; set; } 
     } 

     public class USER { 
      public string password { get; set; } 
      public string USERID { get; set; } 
     } 

     public class NAME { 
      public string FN {set; get;} 
      public class PI { 
       public string FAMILY { set; get; } 
       public string GIVEN { set; get; } 

       public string EMAIL { set; get; } 
      } 
     } 
    } 
} 

コントローラでは、私が持っている:

どう
[HttpPut] 
public HttpResponseMessage GetPerson(COMPANY req) { 
... 
} 

私はそれをデータバインドできますか?

私はXMLを使用してクラスをデータバインドするために持っていると思うので、私はコントローラにnullを取得しています要求

を送信するために郵便配達を使用しています。

答えて

1

まず者が異なるElementName/AttributeNameでクラス/メンバーに注釈を付けてみましょう:

[XmlRoot(ElementName = "PROPERTIES")] 
public class Properties 
{ 
    [XmlElement(ElementName = "DATASOURCE")] 
    public string Datasource { get; set; } 
    [XmlElement(ElementName = "DATETIME")] 
    public string Datetime { get; set; } 
} 

[XmlRoot(ElementName = "SOURCEDID")] 
public class Sourcedid 
{ 
    [XmlElement(ElementName = "SOURCE")] 
    public string Source { get; set; } 
    [XmlElement(ElementName = "ID")] 
    public string ID { get; set; } 
} 

[XmlRoot(ElementName = "USERID")] 
public class UserId 
{ 
    [XmlAttribute(AttributeName = "password")] 
    public string Password { get; set; } 
    [XmlText] 
    public string Text { get; set; } 
} 

[XmlRoot(ElementName = "PI")] 
public class PI 
{ 
    [XmlElement(ElementName = "FAMILY")] 
    public string Family { get; set; } 
    [XmlElement(ElementName = "GIVEN")] 
    public string Given { get; set; } 
    [XmlElement(ElementName = "EMAIL")] 
    public string Email { get; set; } 
} 

[XmlRoot(ElementName = "NAME")] 
public class Name 
{ 
    [XmlElement(ElementName = "FN")] 
    public string FN { get; set; } 
    [XmlElement(ElementName = "PI")] 
    public PI PI { get; set; } 
} 

[XmlRoot(ElementName = "PERSON")] 
public class Person 
{ 
    [XmlElement(ElementName = "SOURCEDID")] 
    public Sourcedid Sourcedid { get; set; } 
    [XmlElement(ElementName = "USERID")] 
    public UserId Userid { get; set; } 
    [XmlElement(ElementName = "NAME")] 
    public Name Name { get; set; } 
    [XmlAttribute(AttributeName = "recstatus")] 
    public string Recstatus { get; set; } 
} 

[XmlRoot(ElementName = "COMPANY")] 
public class Company 
{ 
    [XmlElement(ElementName = "PROPERTIES")] 
    public Properties Properties { get; set; } 
    [XmlElement(ElementName = "PERSON")] 
    public Person Person { get; set; } 
} 

その後、我々は我々が代わりにDataContractSerializerXmlSerializerを使用したいWebAのPI教えてあげましょう:あなたの中Application_start()メソッド内をGlobal.asaxファイルに次の行を追加します。

GlobalConfiguration.Configuration.Formatters.XmlFormatter.UseXmlSerializer = true;