2016-08-05 11 views
2

Es treten mehrere Probleme mit der XML-Suche in ASP.NET-WebAPI auf. Derzeit verwenden wir xmlserializer anstelle von DataContractSearilizer (das ist eine Standard-Serialisierungsmethode für XML-Serialisierung) aus zwei grundlegenden Gründen.ASP.Net-Web-API Xml-Problem mit der Problemlösung

  1. In DataContractSearlizer Wir müssen die Felder alle Objekt zu übergeben aufsteigend sonst bei api Ende null zu bekommen.

  2. Wir müssen auch Namespace im XML-Header für die Übergabe von XML-Objekt an Web-API weitergeben.

Aus diesen zwei Gründen entschieden wir uns für xmlserializer statt DataContractSearlizer zu gehen. Aber jetzt haben wir es mit einem anderen Problem zu tun, das im Standardmechanismus nicht vorhanden war. Lassen Sie sagen, wir haben ein Objekt wie dieses

[DataContract] 
public class Car 
{ 
    public int ID; 

    [DataMember] 
    public string CarName; 

    [DataMember] 
    public string CarType; 

} 

Nun erwarteten wir, dass wir nur auf Client-Seite werden die die Felder von Datamember-Attribut umgeben empfangen, aber unerwartet wir bekommen alle Felder, ob Datamember vorhanden oder nicht vorhanden zuschreiben. Dies funktioniert perfekt in JSW und Ergebnis war, was wir ursprünglich erwartet wurden. Kann uns jemand diesbezüglich helfen?

+0

[Dies] (http://stackoverflow.com/questions/1791946/how-can-i-ignore-a-property-when-serializing-using-the-datacontractserializer) könnte Ihnen helfen, –

Antwort

1

Sie suchen wahrscheinlich für die IgnoreDataMember Attribut:

Wenn auf das Element eines Typs angewendet wird, gibt an, dass das Mitglied nicht Teil eines Datenvertrag ist und nicht serialisiert.

[DataContract] 
public class Car 
{ 
    [IgnoreDataMember] 
    public int ID; 

    [DataMember] 
    public string CarName; 

    [DataMember] 
    public string CarType; 

} 
+0

Ich denke, ich habe das schon versucht, aber es hat auch nicht funktioniert. Lass es mich noch einmal versuchen. Komm nach einigen Minuten zu dir zurück. –

+1

Oh, warte - probiere '[XmlIgnore]' da du DataContractSerializer nicht benutzt - ich war zu schnell ... –

+0

Du bist großartig! Es klappt. Vielen Dank Martin –