2016-05-04 5 views
0

Ich habe eine Liste von Strings in meiner web.config, die die Namen der von Entity Framework generierten Modellmitglieder beschreibt, die in meiner Web-API serialisiert werden dürfen .
Wie ich z.B. das Attribut [IgnoreDataMember] zur Laufzeit setzen?
Die Idee ist, dass nicht alle Daten offen gelegt werden sollten und die Konfiguration, die verfügbar sein sollte, sollte ohne Neukompilierung konfigurierbar sein.
Bis jetzt setze ich nur alle Werte der Mitglieder, die nicht in dieser Liste enthalten sind, auf null. Diese Lösung ist jedoch nicht optimal, weil z.B. Mitglieder des Typs datetime werden zu "0001-01-01T00:00:00" serialisiert und zusätzlich enthält die Antwort eine Menge unnötiger Informationen (die Antworten können bis zu 150 MB groß werden). Es wäre also angenehmer, die Mitglieder einfach aus dem Serialisierungsprozess zu entfernen.So können Sie Datenelemente während der Laufzeit von der JSON/XML-Serialisierung ausschließen

Antwort

0

können Sie die Attribute verwenden:

[XmlIgnore] für XML oder [JsonIgnore] für JSON.

Zum Beispiel:

[XmlIgnore] 
public string MyString { get; set; } 

oder

[JsonIgnore] 
public string MyString { get; set; } 

Hoffnung, das hilft.

+0

Vergessen Sie auch nicht, 'System.Xml.Serialization' bzw.' Newtonsoft.Json' zu verwenden. –

+0

'[IgnoreDataMember]' funktioniert für beide, das weiß ich. Aber das muss zur Laufzeit je nach Konfiguration eingestellt werden ... – Chris

+0

ich sehe. Sie könnten Ihren eigenen JSON-Konverter schreiben, der Ihre Bedingungen zur Laufzeit verwenden kann. Ein weiterer Beitrag, der helfen könnte: [hier] (http://stackoverflow.com/questions/27397494/web-api-conditional-serialization-of-properties-at-runtime) –

0

Ich arbeitete um es mit [DataMember(EmitDefaultValue = false)]. Also sind alle meine Eigenschaften, die auf Null gesetzt sind, nicht in der Antwort enthalten. Dies ist jedoch nicht die beste Lösung, da ich jetzt keine Nullwerte senden kann und Swagger auch das vollständige Modell anzeigt.

Verwandte Themen