WCF-Dienst Rückgabe-Objekt im Json-format
Habe ich einen WCF-Dienst und ich bin Gebäude ein Objekt namens FinalList
enthält ein Objekt namens Chart und eine List<Data>
.
Ich will zurück zu meiner ajax Funktion json-Daten in dem folgenden format:
{"d":{"chart":{"caption":"Year","exportatclient":"1","exportenabled":"1","exporthandler":"chartExporter","labelDisplay":"wrap","numberprefix":"","showborder":"1","slantLabels":"1","useroundedges":null,"yaxisname":"Anzahl
der
hits"},"data":[{"label":"1960s","link":null,"tooltext":null,"value":3},{"label":"1970s","link":null,"tooltext":null,"value":56},{"label":"1980s","link":null,"tooltext":null,"value":98}]}}
Aber mein Service ist wieder so:
{"d":{"__type":"FinalList:#MyNamespace.FusionChartsFields","chart":{"__type":"Chart:#MyNamespace.FusionChartsFields","caption":"Year","exportatclient":"1","exportenabled":"1","exporthandler":"chartExporter","labelDisplay":"wrap","numberprefix":"","showborder":"1","slantLabels":"1","useroundedges":null,"yaxisname":"Anzahl
der
hits"},"data":[{"__type":"Data:#MyNamespace.FusionChartsFields","label":"1960s","link":null,"tooltext":null,"value":3},{"__type":"Data:#MyNamespace.FusionChartsFields","label":"1970s","link":null,"tooltext":null,"value":56},{"__type":"Data:#MyNamespace.FusionChartsFields","label":"1980s","link":null,"tooltext":null,"value":98}]}}
Wenn ich in WebServices (asmx) ich brauchte nur zu erklären, meine Klasse als "Objekt" anstelle von FinalList, dann waren die Ergebnisse in der korrekten json-format, die ich brauche.
Ich habe versucht, die Umwandlung in string und bringt es mir das richtige, aber einschließlich '\' (z.B. {"d":{\"chart\":{\"caption\":\"Jahr\") und das ist nicht das, was ich will.
Weiß jemand wie ich das entfernen kann diese "__type" - und class-Namen?
Ich bin mit .Net 4
Meine FinalList Klasse ist wie folgt:
public class FinalList
{
private Chart _chart;
private List<Data> _data = new List<Data>();
public Chart chart
{
get { return _chart; }
set { _chart = value; }
}
public List<Data> data
{
get { return _data; }
set { _data = value; }
}
}
Mein service-Vertrag enthält
[OperationContract]
[WebInvoke(RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
obigen seine Erklärung.
__type
ist in der Regel ein Hinweis auf die DataContractSerializer über zu übersetzen, wie interfaces oder abstrakten Basisklassen.)Meine Klasse in meiner svc.cs hat "[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Erlaubt)]" über seine Erklärung.
InformationsquelleAutor Jenninha | 2012-09-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Im wesentlichen das Ergebnis ist verpackt in einen zusätzlichen Typ (vermutlich, um für mehrere Ergebnisse?) und es gibt eine __type-Eigenschaft an jedem Objekt zurückgegeben. Selbst einfache Ergebnis-Werte zumindest die wrapper-Typ, also sogar sagen, dass ein string-Ergebnis d: enthält Art.
Wenn Sie MS AJAX auf dem client kein Problem - der Kunde weiß, wie zu Parsen von JSON in ein sauberes Objekt. Aber wenn Sie mit einem anderen Mechanismus - jQuery oder Prototype zum Beispiel das abrufen einer Ergebnismenge, die Sie erhalten wieder ein funky-Objekt, in dem Sie haben zu gehen führen.d....Nachname zum Beispiel, die ist hässlich.
Versuchen, diese,
vielleicht, aber Sie schrieb "wer weiß, wie kann ich diese entfernen "__type" und Klasse name?"
Du sagst also ich kann nur dies ändern, wenn ich mein ajax-call? Das kann ich nicht alles aus meinem WCF-service?
Ändern Sie das Attribut in Ihrem Dienst ! nicht jour js. Auch kann es einfacher sein zu testen, im browser mit einem WebGet.
Sorry, habe ich bereits geändert, nach deinem Beispiel aber nichts verändert. Aber ich bin immer noch mit jQuery zu machen, der ajax-Aufruf.
InformationsquelleAutor Cybermaxs
Verhalten, was verwenden Sie für Ihre WCF-service? Wenn Sie mit
<enableWebScript />
dann der Wechsel zu<webHttp/>
im service-Verhalten Konfiguration wird Ihr problem lösen.Als Cybermaxs sagte, wenn Sie mit einem ASP.NET Ajax-client dann wird dies nicht ein problem, und Sie können weiterhin verwenden
<enableWebScript />
.InformationsquelleAutor Tiago
Versuchen Sie einen Konstruktor wie folgt:
InformationsquelleAutor nealkernohan