You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dynamics CRM查询数据返回的JSON数组前端无法正确格式化问题

问题根因

你遇到的问题本质是ASP.NET MVC内置的Json()方法默认序列化器和Newtonsoft.Json的JObject/JArray类型不兼容导致的。内置的JavaScriptSerializer无法识别Newtonsoft的JSON对象结构,会直接序列化JObject/JArray的内部属性,最终返回的结构就会出现异常的嵌套数组,而非预期的键值对。


解决方案

方案1:替换JArray/JObject为字典+匿名类(推荐,改动最小)

直接用C#原生字典存储CRM拉取的属性,不需要依赖Newtonsoft的JSON对象类型,内置序列化器可正常处理:

var crmItems = new List<object>();

using (var CrmSvc = new CrmConnectionManager())
{
    EntityCollection OrdersList = CrmSvc.Connection.RetrieveMultiple(new FetchExpression(fetchForSupplier));
    foreach (var item in OrdersList.Entities)
    {
        var crmItem = new Dictionary<string, object>();
        foreach (KeyValuePair<String, string> attribute in item.FormattedValues)
        {
            crmItem[attribute.Key] = attribute.Value;
        }
        crmItems.Add(crmItem);
    }
}

return Json(new { status = "success", result = crmItems } , JsonRequestBehavior.AllowGet);

方案2:手动用Newtonsoft序列化后返回字符串

如果需要保留原有JArray/JObject的逻辑,直接序列化整个返回结果为字符串,返回Content类型响应即可:

// 原有JArray生成逻辑不变
JArray crmItems = new JArray();
JObject crmItem;

using (var CrmSvc = new CrmConnectionManager())
{
    EntityCollection OrdersList = CrmSvc.Connection.RetrieveMultiple(new FetchExpression(fetchForSupplier));
    foreach (var item in OrdersList.Entities)
    {
        crmItem = new JObject();
        foreach (KeyValuePair<String, string> attribute in item.FormattedValues)
        {
            crmItem.Add(new JProperty(attribute.Key, attribute.Value));
        }
        crmItems.Add(crmItem);
    }
}

// 手动序列化+返回JSON响应
var responseObj = new { status = "success", result = crmItems };
string jsonStr = Newtonsoft.Json.JsonConvert.SerializeObject(responseObj);
return Content(jsonStr, "application/json");

方案3:全局替换MVC序列化器

如果项目整体统一用Newtonsoft.Json处理JSON,可以在Global.asax的Application_Start方法里修改默认序列化器,修改完成后就可以直接把JObject/JArray传到Json()方法里正常返回,无需额外处理。


内容的提问来源于stack exchange,提问作者Ola Hansen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 14:57:03