1

私は WCF サービスを持っており、FinalListChart というオブジェクトとList<Data>. 以下の形式で ajax 関数の json データに戻りたい:

{"d":{"chart":{"caption":"年","exportatclient":"1","exportenabled":"1","exporthandler":"chartExporter","labelDisplay":"wrap" ,"numberprefix":"","showborder":"1","slantLabels":"1","useroundedges":null,"yaxisname":"ヒット数"},"data":[{"ラベル" :"1960s","link":null,"tooltext":null,"value":3},{"label":"1970s","link":null,"tooltext":null,"value":56 },{"ラベル":"1980 年代","リンク":null,"ツールテキスト":null,"値":98}]}}

ただし、私のサービスは次のように返されます:

{"d":{"__type":"FinalList:#MyNamespace.FusionChartsFields","chart":{"__type":"Chart:#MyNamespace.FusionChartsFields","caption":"年","exportatclient":" 1","exportenabled":"1","exporthandler":"chartExporter","labelDisplay":"wrap","numberprefix":"","showborder":"1","slantLabels":"1", "useroundedges":null,"yaxisname":"ヒット数"},"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}]}}

WebServices (asmx) を使用したとき、クラスを FinalList ではなく「オブジェクト」として宣言するだけで済み、結果は必要な正しい json 形式になりました。

私はそれを文字列に変換しようとしましたが、正しいものをもたらしますが、 '\' (例: {"d":{\"chart\":{\"caption\":\"Year\") が含まれていますが、それはそうではありません私が欲しい。

これらの「__type」とクラス名を削除する方法を知っている人はいますか?

私は.Net 4を使用しています

私の FinalList クラスは次のとおりです。

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; }
        }
    }

私のサービス契約には以下が含まれます

[OperationContract]
[WebInvoke(RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]

その宣言の上。

4

3 に答える 3

1

WCFサービスにどのような動作を使用していますか?を使用している場合は、サービス動作構成で<enableWebScript />に切り替えると<webHttp/>問題が解決します。

Cyber​​maxsが言ったように、ASP.NET Ajaxクライアントを使用している場合、これは問題にはならず、引き続き使用できます<enableWebScript />

于 2012-09-20T12:25:45.553 に答える
1

基本的に、結果は追加の型でラップされ (おそらく複数の結果を許可するため?)、返される各オブジェクトに __type プロパティが関連付けられています。単純な結果値でも少なくともラッパー型が含まれているため、文字列の結果に d: 型が含まれていると言えます。

クライアントで MS AJAX を使用している場合、問題はありません。クライアントは、この JSON を解析してクリーンなオブジェクトにする方法を知っています。しかし、他のメカニズム (jQuery や Prototype など) を使用して結果セットを取得している場合、たとえば、result.d.LastName に移動する必要があるファンキーなオブジェクトが返されます。これは醜いです。

これを試して、

[OperationContract]
[WebInvoke(BodyStyle=WebMessageBodyStyle.WrappedRequest,RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
于 2012-09-20T12:20:39.540 に答える
0

以下のようにコンストラクタを追加してみてください。

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; }
    }

    protected internal FinalList() { }

}
于 2015-01-26T15:16:54.127 に答える