2017-04-11 12 views
1

WEB API用の新しい契約を定義しています。具体的なXML書式を設定したいので、以下のXMLを受け入れることができます。 JSON形式は、私が予想したとおりに正確にマッピングされますが、XMLはそうではありません。xmlとしてWebAPIマッピングクラス

XMLで「メンバー」ラッパーノードの生成を停止するにはどうすればよいですか?

私はクラスに解析するXML:

<MembersUpdate> 
<NotificationUrl>http://yoururl/member/profile/</NotificationUrl> 
<Timestamp >2017-04-11T12:13:35.6516915Z</Timestamp> 
<Member> 
    <MemberId>0</MemberId> 
    <LastUpdated>0001-01-01T00:00:00</LastUpdated> 
</Member> 
<Member> 
    <MemberId>0</MemberId> 
    <LastUpdated>0001-01-01T00:00:00</LastUpdated> 
</Member> 
<Member> 
    <MemberId>0</MemberId> 
    <LastUpdated>0001-01-01T00:00:00</LastUpdated> 
</Member> 
<Member> 
    <MemberId>0</MemberId> 
    <LastUpdated>0001-01-01T00:00:00</LastUpdated> 
</Member> 
</MembersUpdate> 

マッピングクラス:

レンダリングの例では、追加のノードを持っている、と私の元のXMLを解析することはできませんしかし
/// <remarks/> 
[DataContract] 
public partial class MembersUpdate 
{ 
    /// <remarks/> 
    [DataMember] 
    public string NotificationUrl { get; set; } 

    /// <remarks/> 
    [DataMember] 
    public System.DateTime Timestamp { get; set; } 

    /// <remarks/> 
    [DataMember] 
    public MembersUpdateMember[] Member { get; set; } 
} 

/// <remarks/> 
[DataContract] 
public partial class MembersUpdateMember 
{ 
    /// <remarks/> 
    [DataMember] 
    public byte MemberId { get; set; } 

    /// <remarks/> 
    [DataMember] 
    public System.DateTime LastUpdated { get; set; } 
} 

。私は、以下の構造のためにレンダリングされたサンプルを追加しました:WebAPIのはDataContractSerializerを使用しているため

<MembersUpdate xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/CivicaSystemsLtd.Areas.Notices.ApiControllers"> 
     <Member> 
     <MembersUpdateMember> 
      <LastUpdated>2017-04-11T23:58:06.6310087+01:00</LastUpdated> 
      <MemberId>64</MemberId> 
     </MembersUpdateMember> 
     <MembersUpdateMember> 
      <LastUpdated>2017-04-11T23:58:06.6310087+01:00</LastUpdated> 
      <MemberId>64</MemberId> 
     </MembersUpdateMember> 
     </Member> 
     <NotificationUrl>sample string 1</NotificationUrl> 
     <Timestamp>2017-04-11T23:58:06.6300095+01:00</Timestamp> 
    </MembersUpdate> 
+0

私の更新された回答を見てください、私は私のcoffeとmisを持っていなかったあなたを理解しました。 –

答えて

0

これは、ほぼ不可能です。あなたはXmlSerializerに切り替えることができる場合、あなたは次のことを行うことができ

[XmlElement(ElementName = "Member")] 
public MembersUpdateMember[] Member { get; set; } 

あなたはattribute on your Controller経由でオンデマンドで切り替えることができます:

public class UseXmlSerializerAttribute : Attribute, IControllerConfiguration 
{ 
    public void Initialize(HttpControllerSettings controllerSettings, 
          HttpControllerDescriptor controllerDescriptor) 
    { 
     var xmlFormater = new XmlMediaTypeFormatter {UseXmlSerializer = true}; 

     controllerSettings.Formatters.Clear(); 
     controllerSettings.Formatters.Add(xmlFormater); 
    } 
} 

その後、あなたのコントローラ上でそれを使用します。

[UseXmlSerializer] 
public class FooController : ApiController 
{ 
} 
関連する問題