2017-01-26 4 views
0

Ich kann die XML in meinem ASP.net Web-API-Projekt in Post-Anforderung erfolgreich, deserialisierenAsp.net WebAPI XML deserialisieren?

XML:

<Request xmlns:i="http://www.w3.org/2001/XMLSchema-instance"  xmlns="http://schemas.datacontract.org/2004/07/TestAPI.Models"> 
<Child> 
    <CountryISO> 
    <country xmlns:d4p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> 
    <d4p1:string>CA</d4p1:string> 
    <d4p1:string>US</d4p1:string> 
    </country> 
    </CountryISO> 
</Child> 
</Request> 

Modell

namespace TestWebTuiAPI.Models 
{ 

public class Request 
    { 
    public Trip Child{ get; set; } 
    } 

    public class Child 
    { 
    public CountryISO CountryISO { get; set; } 
    } 

    public class CountryISO 
    { 
     [XmlElement("country")] 
     public List<string> country { get; set; } 
    } 
} 

Nun, ich Sie müssen alle oben genannten Schritte ausführen, damit meine Post-Anfrage in der ASP.Net-Web-API funktioniert. Wenn ich das [XmlElement ("country")] - Attribut aus dem Modell entferne, gibt das CountryISO-Tag im XML-Wert null oder leer zurück.

, was ich will hier erreichen, ist zu deserialisieren dem folgenden XML erfolgreich POST-Anfrage mit,

XML:

<Request> 
<Child> 
    <CountryISO> 
    <country>CA</country> 
    <country>US</country> 
    </CountryISO> 
</Child> 
</Request> 

Wenn ich versuche, diese über XML zu schreiben, ich bin Ich bekomme eine ungültige Anfrage und erhalte ein Nullmodell. Ich muss die Header (Elternknoten und CountryISO-Knoten) in der ersten XML-Datei hinzufügen, damit sie erfolgreich funktioniert. Ich habe verschiedene Lösungen ausprobiert, aber vergeblich.

Jeder Rat wird sehr geschätzt.

EDIT: wenn ich

config.Formatters.XmlFormatter.UseXmlSerializer = true; 

Ich habe nicht die Header-Dateien benötigt, aber ich bin immer leere Werte innerhalb des CountryISO-Tag?

Antwort

0

In WebAPI ist es gängige Praxis Ihre Klassen und Eigenschaften für die Serialisierung Operationen mit [Datacontract] und [Datamember] Attribute bzw. markieren:

namespace TestWebTuiAPI.Models 
{ 
    [DataContract] 
    public class Request 
    { 
     [DataMember] 
     public Trip Child{ get; set; } 
    } 

    [DataContract] 
    public class Child 
    { 
     [DataMember] 
     public CountryISO CountryISO { get; set; } 
    } 

    [DataContract] 
    public class CountryISO 
    { 
     [DataMember] 
     public List<string> country { get; set; } 
    } 
} 

Ohne die richtigen Attribute, WebAPI weiß nicht, dass es sein sollte serialisieren Sie Ihre Eigenschaft.

+0

@ipszBuffer es funktioniert nicht, ich brauche noch den XML-Header '' und '', damit die Postanforderung funktioniert. – Binny

1

Wenn Sie möchten, wie diese xml schreiben:

<Request> 
<Child> 
    <CountryISO> 
    <country>CA</country> 
    <country>US</country> 
    </CountryISO> 
</Child> 
</Request> 

Beschriften Sie Ihre Eigenschaften/Klassen wie die vorherige Antwort sagte, sondern auch die [XmlElement] Attribut in das Land Eigenschaft hinzufügen:

[DataContract] 
public class Request 
{ 
    [DataMember] 
    public Child Child { get; set; } 
} 

[DataContract] 
public class Child 
{ 
    [DataMember] 
    public CountryISO CountryISO { get; set; } 
} 

[DataContract] 
public class CountryISO 
{ 
    [DataMember] 
    [XmlElement("country")] 
    public List<string> country { get; set; } 
} 
+0

danke @peco für Ihre Lösung, aber ich bekomme immer noch Null in CountryISO Tag – Binny

+0

Weitere Tests kann ich es zur Arbeit machen. Ich brauche kein Header-Tag für CountryISO, ich habe nur das folgende Überschrift-Tag für das XML ''. Es ist nicht die perfekte Lösung, aber ich bin mit dieser Lösung zufrieden. – Binny