如何通过C#返回JSON并用JavaScript解析它?

如何通过C#返回JSON并用JavaScript解析它?,c#,javascript,asp.net,asmx,C#,Javascript,Asp.net,Asmx,我正在使用一个web服务,它从我的active directory获取数据,并将一个对象数组返回到我的javascript。问题是当我只想像这样返回对象的值时,我是封装在包含_类型的对象中的响应 ([{ value: "one", label: "Foo" }, { value: "two", label: "Bar" }]). 但是我收到了这个 [Object { __type="Service+NameDTO", value: "one", label: "Foo"}, Object {

我正在使用一个web服务,它从我的active directory获取数据,并将一个对象数组返回到我的javascript。问题是当我只想像这样返回对象的值时,我是封装在包含_类型的对象中的响应

([{ value: "one", label: "Foo" }, { value: "two", label: "Bar" }]). 
但是我收到了这个

[Object { __type="Service+NameDTO", value: "one", label: "Foo"}, Object { __type="Service+NameDTO", value:     "two", label: "Bar"}]
这是我的c#

public NameDTO[]GetCompletionList(字符串前缀)
{
var nameList=新列表();
DirectorySearcher search=新建DirectorySearcher();
字符串strPath=search.SearchRoot.Path;
DirectoryEntry=新的DirectoryEntry(strPath);
search.PageSize=1000;
search.Filter=“(&(objectClass=user)(objectCategory=person)(displayName=*”+前缀+“*)”;
foreach(search.FindAll()中的SearchResult sResultSet)
{
如果(sResultSet.Properties[“邮件”]。计数>0)
{
var dto=新名称dto()
{
label=(字符串)sResultSet.Properties[“displayName”][0],
值=(字符串)sResultSet.Properties[“邮件”][0],
};
名称列表。添加(dto);
}
}
NameDTO[]myArray=nameList.ToArray();
返回myArray;
}
公共类命名为
{
公共字符串标签{get;set;}
公共字符串值{get;set;}
}
还有我的javascript

<script type="text/javascript">
    $(document).ready(function () {
        $('#tokenfield').tokenfield({
            autocomplete: {
                source: function (request, response) {
                    $.ajax({
                        url: '<%#ResolveUrl("~/Service1.asmx/GetCompletionList") %>',
                        data: "{ 'prefix': '" + request.term + "'}",
                        dataType: "json",
                        type: "POST",
                        contentType: "application/json; charset=utf-8",
                        success: function (data) {
                           response($.map(data.d, function (item) {
                            return data      
                           }))
                        },
                        success: function(response) {
                            $.each(response, function(key, val) {
                                alert(val.id);
                            });
                        },
                        error: function (response) {
                            alert(response.responseText);
                        },
                        failure: function (response) {
                            alert(response.responseText);
                        }
                   });
                },
                search: function () {
                var term = this.value;
                if (term.length < 3) {
                    return false;
                }
                },
                focus: function () {
                // prevent value inserted on focus
                return false;
                },
            },
      });
});
</script>

$(文档).ready(函数(){
$('#tokenfield')。tokenfield({
自动完成:{
来源:功能(请求、响应){
$.ajax({
url:“”,
数据:“{'前缀':'”+request.term+“}”,
数据类型:“json”,
类型:“POST”,
contentType:“应用程序/json;字符集=utf-8”,
成功:功能(数据){
响应($.map)(数据.d,函数(项){
返回数据
}))
},
成功:功能(响应){
$。每个(响应、功能(键、val){
警报(val.id);
});
},
错误:函数(响应){
警报(response.responseText);
},
故障:功能(响应){
警报(response.responseText);
}
});
},
搜索:函数(){
var项=该值;
如果(术语长度<3){
返回false;
}
},
焦点:功能(){
//防止在焦点上插入值
返回false;
},
},
});
});

您可能需要一些典型的JSON构建器

在服务器端,您可以制作字典、数组等,并将所有内容放入

JsonMapper.ToJson(jsonDict)
打电话

我的项目中的这个函数间接调用了JsonSerializer(),Newtonsoft JSON处理程序。对于序列化和反序列化JSON都非常有用

不过,我可能误解了你的问题;有点模糊

在这里非常相关,非常有用

结果是你可能需要这个:

var jsonString = @Model; //or however you get your string.
var json = JSON.parse(jsonString);

您使用的服务器端技术是什么,wcf、asp.net、asp.net mvc、web api?@DanielA.White,我想他使用的是
asp.net web服务。请查看他的ajax url
/Service1.asmx/GetCompletionList
我已经完成了,它看起来非常接近,但它是作为json字符串传递的,但我需要数组的返回类型。为什么需要数组的返回类型?你要返回什么?我正在使用的jquery插件接受一个对象数组的格式([{value:“one”,label:“Foo”},{value:“two”,label:“Bar”}])啊,我明白了!你只是错过了一步。JSON序列化程序是必需的,您根本不知道如何从字符串在JavaScript中解析JSON。我现在会适当地更新我的答案。实际上我不确定。插件仍然不工作,但输入现在似乎是正确的,所以你回答了我的问题。现在谈谈其他问题。
var jsonString = @Model; //or however you get your string.
var json = JSON.parse(jsonString);