Ich erhalte das k_BackingField in meinem zurückgegebenen JSON, nachdem ich eine XML-Datei in ein .net c # -Objekt serialisiert habe.
Ich habe das DataContract- und das DataMember-Attribut zum .net c # -Objekt hinzugefügt, aber dann erhalte ich auf der json-Client-Seite nichts.
[XmlRoot("person")]
[Serializable]
public class LinkedIn
{
[XmlElement("id")]
public string ID { get; set; }
[XmlElement("industry")]
public string Industry { get; set; }
[XmlElement("first-name")]
public string FirstName { get; set; }
[XmlElement("last-name")]
public string LastName { get; set; }
[XmlElement("headline")]
}
Beispiel für den zurückgegebenen json:
home: Object
<FirstName>k__BackingField: "Storefront"
<LastName>k__BackingField: "Doors"
quelle
[Serializable]
Aus deiner Klasse entfernenquelle
[Serializable]
, daher hat das Hinzufügen von Hintergrundfeldern geholfen.Der Standard-WebApi-Serializer fügt die Syntax "__BackingField:" zu den automatischen Eigenschaften von c # hinzu. Fügen Sie dies Ihrer WebConfig in App_Start hinzu, um den saubereren JSON zu erhalten, nach dem Sie möglicherweise suchen.
quelle
Wir haben einige Objekte, die als gekennzeichnet sind,
[Serializable]
damit sie mit herkömmlichen Methoden serialisiert werden können, die wir jedoch für die Verwendung mit der Web-API in JSON sauber serialisieren müssen. EinstellungIgnoreSerializableAttribute
auftrue
wird verhindert, dass sich Newtonsoft.Json wie die Serialisierer von Microsoft verhält, und stattdessen werden nur die öffentlichen Eigenschaften serialisiert.TLDR: Fügen Sie dies zu WebApiConfig.cs hinzu:
Moderator: Anstatt eine wirklich gute Antwort auf eine mehrmals gestellte Frage zu löschen, löschen Sie bitte die doppelte Frage. Dies ist eine gültige Antwort auf eine gültige Frage.
quelle
Einfach Einfach und anständig, um Daten verfügbar zu machen Wir müssen Daten im Objekt einem leicht lesbaren und konsistenten Format aussetzen
Entfernen Sie zuerst [Serializable]
Fügen Sie nun [DataContract] in der Klasse und [DataMember] für die Eigenschaft wie im folgenden Beispiel hinzu
Hoffe diese Hilfe
Danke.
quelle
Einige Optionen:
[Serializable]
Vom Modell entfernenFügen Sie
[DataContract]
und[DataMember]
zu Ihrem Modell zusammen mit[Serializable]
Fügen Sie die folgende Zeile hinzu
App_Start/WebApiConfig.cs
quelle
Eine weitere Lösung, die bei JSON.NET hilfreich sein kann. Es kann ausreichen, die Klasse mit dem Attribut [Newtonsoft.Json.JsonObject] zu markieren.
Ich habe mit cs-Klassen gearbeitet, die aus xsd erstellt wurden, und einige Eigenschaften mithilfe von Teilklassen hinzugefügt. Nach der JSON-Serialisierung wurden diese Eigenschaften mit k_BackingField markiert. Die in anderen Antworten erwähnten JsonFormatter-Einstellungen halfen ebenfalls, aber einfacher war es, eine Teilklasse mit dem Attribut [JsonObject] zu markieren.
quelle
Ich habe
DataContractJsonSerializer
mit einer Klasse aus einer anderen Assembly verwendet, die dasSerializable
Attribut hatte. Die Ausgabe enthielt "k__BackingField". Durch Entfernen desSerializable
Attributs (in der anderen Assembly) wurde dies behoben. Nicht sicher warum.quelle
Angenommen, Sie sehen dieses Problem in Ihrem MVC-Projekt, dann ist es ziemlich einfach, die Verwendung von @ Html.JsonData zu ersetzen. Hier ist ein Codeausschnitt, der in der Vergangenheit für mich funktioniert hat:
Nicht so elegant, aber zur Not einfach.
quelle
Ich hatte dieses Problem, wenn ich Selbstreferenzeigenschaften in meiner Klasse habe, wie z.
Und es gab ein Ergebnis, die Person war mit sich selbst befreundet. Ich habe nur sichergestellt, dass meine Ergebnismenge keine selbstreferenzierenden Objekte enthält. Hoffe das hilft.
quelle
Ich musste die Attribute [Serializable] verwenden, daher war das Entfernen keine Option.
XmlSerializer ignoriert [XmlAttribute] in WebApi
Die obige Lösung hat es für mich gelöst.
quelle
In meinem Fall war dieser Fehler für die Newtonsoft.Json-Version, der Server suchte nach der Version 6.0.0 und ich hatte die Version 11.0, also musste ich die Version 6.0.0 installieren
quelle
Freunde, deklarieren Sie keine Eigenschaften wie diese:
Aber erstellen Sie zusätzliche Vars, wie alte ...
quelle