Exclude-Eigenschaft von json-Serialisierung in ApiController
Ich versuche ausschließen Eigenschaften von Wesen zu JSON serialisiert im web ApiControllers. Ich habe überprüft die folgenden 2 Szenarien arbeiten.
Beigefügt habe ich die folgenden Attribute, die auf die Eigenschaft, die ich ausschließen wollen.
[System.Web.Script.Serialization.ScriptIgnore]
[System.Xml.Serialization.XmlIgnore]
Wenn ich manuell serialisieren mein Objekt mithilfe der JavaScriptSerializer, das Eigentum ist ausgeschlossen. Auch, wenn ich die serialisierte XML-Ausgabe aus dem web ApiController, das Eigentum ist ausgeschlossen. Das problem ist, das serialisierte JSON über das web ApiController noch die Eigenschaft enthält. Gibt es ein weiteres Attribut, das ich verwenden kann, schließt die Eigenschaft von JSON-Serialisierung?
UPDATE:
Erkannte ich, alle meine Prüfungen wurden in einer viel komplexeren Projekt und, dass ich es noch nicht versucht, diese in einer isolierten Umgebung. Ich Tat dies und bin noch immer die gleichen Ergebnisse. Hier ist ein Beispiel von einigen fehlerhaften code.
public class Person
{
public string FirstName { get; set; }
[System.Web.Script.Serialization.ScriptIgnore]
[System.Xml.Serialization.XmlIgnore]
public string LastName { get; set; }
}
public class PeopleController : ApiController
{
public IEnumerable<Person> Get()
{
return new[]
{
new Person{FirstName = "John", LastName = "Doe"},
new Person{FirstName = "Jane", LastName = "Doe"}
};
}
}
Hier ist die generierte Ausgabe.
JSON:
[
{
"FirstName" : "John",
"LastName" : "Doe"
},
{
"FirstName" : "Jane",
"LastName" : "Doe"
}
]
XML:
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfPerson xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Person>
<FirstName>John</FirstName>
</Person>
<Person>
<FirstName>Jane</FirstName>
</Person>
</ArrayOfPerson>
Ich sehe das nicht als ein Duplikat, dass ich da nicht verwenden können, IgnoreDataMember, weil mein Objekt und alle seine Eigenschaften noch serialisiert werden müssen, für die WCF-Kommunikation hinter den kulissen. Ich denke, der Grund für meine Frage ist, was ist ASP.NET mit serialisieren zu JSON? Es scheint nicht, Sie sind mithilfe der JavaScriptSerializer.
ah, hab Sie. Ich stehe korrigiert.
Check out this one: die Antwort scheint zu sein, dass der Binder Modell tut es, und Sie brauchen, um Ihre eigene Modell-binder: stackoverflow.com/questions/7330555/....
Ok, noch ein Versuch... check out this guy ' s Lösung: stackoverflow.com/questions/1302946/...
InformationsquelleAutor Adam Carr | 2012-05-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bewusst sein, dass die JSON-Serialisierung ist die änderung in der Web-API.
In der beta-Version, Web-API verwendet DataContractJsonSerializer zu serialisieren JSON. Dies hat sich jedoch geändert; die neueste version der Web-API verwendet json.net standardmäßig, aber Sie können diese Einstellung außer Kraft setzen und verwenden DataContractJsonSerializer statt.
Mit DataContractJsonSerializer, können Sie mit [DataContract] - Attribute zur Steuerung der Serialisierung. Ich bin noch nicht sehr vertraut mit json.net also ich weiß nicht, wie es steuert die Serialisierung.
Ist dies immer noch wahr mit WCF-Dienst und .NET 4.5?
InformationsquelleAutor Mike Wasson
Können Sie
[JsonIgnore]
Attribut für ein JSON-spezifische festigen; oder Sie können[DataContract]
und[DataMember]
für ein Update, das funktioniert sowohl mit der JSON-Formatierer, und mit den (XML -)DataContractSerializer
.Dieser Artikel enthält weitere detaillierte Informationen über die Standard-media-Typ formatter:
http://www.asp.net/web-api/overview/formats-and-model-binding/json-and-xml-serialization#json_media_type_formatter
InformationsquelleAutor crimbo
Dies ist ein wenig spät, um das Spiel, aber
IgnoreDataMember
ist genau das, was wir brauchen, in Ihrem/meinem Szenario:Laut MSDN,
IgnoreDataMember
kam mit .NET 3.0 SP2.InformationsquelleAutor JMD
JsonIgnore ändert die gesamte definition der Klasse. Im Fall, das Sie Steuern möchten bestimmte Aktion/Anfrage können Sie versuchen Sie diesen Ansatz.
InformationsquelleAutor joym8
Sieht aus wie das deckt, was ich brauche. Es zeigt Ihnen, Sie können die swap-Formatierer. Es beinhaltet sogar ein Beispiel formatter verwendet, der JavaScriptSerializer das ist, was ich brauche.
http://wildermuth.com/2012/2/22/WebAPI_for_the_MVC_Guy
InformationsquelleAutor Adam Carr