将JavaScript映射传递给json wcf服务

将JavaScript映射传递给json wcf服务,第1张

将JavaScript映射传递给json wcf服务

默认情况下,WCF不表示

Dictionary
为JSON对象-
而是将它们表示为键/值对的数组。因此,要将该地图发送到WCF服务,您需要对其进行适当的隐藏(请参见下面的代码)。

另一种选择是使用自定义消息格式化程序,该消息格式化程序知道如何根据JSON对象填充字典。有关消息格式化程序的更多信息,请查看此博客文章。

这显示了将该对象传递给服务的一种方法:

Service.svc:

<%@ ServiceHost Language="C#" Debug="true" Service="StackOverflow_15001755.Service"     CodeBehind="StackOverflow_15001755.svc.cs"      Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>

Service.svc.cs:

using System.Collections.Generic;using System.ServiceModel;using System.ServiceModel.Web;namespace StackOverflow_15001755{    [ServiceContract]    public class Service    {        static Dictionary<string, int> dictionary;        [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]        public void setDictionary(Dictionary<string, int> myDictionary)        { dictionary = myDictionary;        }        [WebGet(RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]        public Dictionary<string, int> getDictionary()        { return dictionary;        }    }}

Test.html(HTML / JS代码,使用jQuery进行ajax调用):

<html xmlns="http://www.w3.org/1999/xhtml"><head>    <script type="text/javascript" src="scripts/jquery-1.7.2.js"></script>    <script type="text/javascript" src="scripts/json2.js"></script></head><body>    <script type="text/javascript">        function StackOverflow_15001755_Test() { function dictionaryToKVPArray(obj) {     var data = [];     for (var key in obj) {         data.push({ Key: key, Value: obj[key] });     }     return data; } function KVPArrayToDictionary(arr) {     var result = {};     arr.forEach(function (item) {         result[item.Key] = item.Value;     });     return result; } var map = {}; map['a'] = 1; map['b'] = 2; map['c'] = 3; var data = dictionaryToKVPArray(map); var baseUrl = "/StackOverflow_15001755.svc"; $.ajax({     type: 'POST',     url: baseUrl + '/setDictionary',     contentType: 'application/json',     data: JSON.stringify({ myDictionary: data }),     success: function (result) {         $('#result').text('Sent the dictionary');         $.ajax({  type: 'GET',  url: baseUrl + '/getDictionary',  success: function (result) {      var newMap = KVPArrayToDictionary(result);      $('#result2').text(JSON.stringify(newMap));  }         });     } });        }    </script>    <input type="button" value="StackOverflow 15001755" onclick="StackOverflow_15001755_Test();" /><br />    <div id='result'></div><br />    <div id='result2'></div><br /></body></html>


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4925526.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-13
下一篇 2022-11-12

发表评论

登录后才能评论

评论列表(0条)

保存