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

使用C#反序列化Dynamics 365 CRM API JSON返回null问题排查

解决Dynamics 365 CRM JSON反序列化返回null的问题

从你的代码和描述来看,反序列化返回null最可能的原因是C#类的属性名和Dynamics 365 API返回的JSON字段名不匹配,加上缺少必要的反序列化配置,导致Newtonsoft.Json无法正确解析JSON结构。下面是具体的解决步骤:

1. 修正类的属性映射(核心问题)

Dynamics 365返回的JSON有特定的字段命名规则,比如上下文字段是@odata.context,数据数组是value,而你的类里用了odata_context和keyValues,两者完全不匹配,这会导致反序列化器找不到对应的数据,最终返回null。

你需要给类的属性添加[JsonProperty]特性,明确映射JSON中的字段名。修正后的类如下:

using Newtonsoft.Json;
using System;
using System.Collections.Generic;

public class Values
{
    [JsonProperty("@odata.context")]
    public string OdataContext { get; set; }

    [JsonProperty("value")]
    public List<ContactsDeserialize> KeyValues { get; set; }
}

public class ContactsDeserialize : IDisposable
{
    [JsonProperty("@odata.etag")]
    public string OdataEtag { get; set; }

    [JsonProperty("contactid")]
    public Guid ContactId { get; set; }

    [JsonProperty("crimson_title")]
    public string CrimsonTitle { get; set; }

    [JsonProperty("firstname")]
    public string FirstName { get; set; }

    [JsonProperty("lastname")]
    public string LastName { get; set; }

    [JsonProperty("createdon")]
    public DateTime? CreatedOn { get; set; }

    [JsonProperty("birthdate")]
    public DateTime? BirthDate { get; set; }

    [JsonProperty("emailaddress1")]
    public string EmailAddress1 { get; set; }

    [JsonProperty("mobilephone")]
    public string MobilePhone { get; set; }

    [JsonProperty("address1_line1")]
    public string Address1Line1 { get; set; }

    [JsonProperty("address1_line2")]
    public string Address1Line2 { get; set; }

    [JsonProperty("address1_line3")]
    public string Address1Line3 { get; set; }

    [JsonProperty("address1_city")]
    public string Address1City { get; set; }

    [JsonProperty("address1_postalcode")]
    public string Address1PostalCode { get; set; }

    [JsonProperty("address1_telephone1")]
    public string Address1Telephone1 { get; set; }

    public void Dispose()
    {
        // 这里实现你的IDisposable逻辑,如果不需要可以留空或移除接口(如果没实际释放逻辑的话)
    }
}

2. 调整反序列化配置

Dynamics 365返回的JSON通常包含很多你未定义的额外字段,如果不配置忽略这些未知字段,反序列化器可能会抛出错误,最终返回null。你需要添加序列化设置来避免这种情况:

var serializerSettings = new JsonSerializerSettings
{
    // 忽略JSON中存在但类中未定义的属性
    MissingMemberHandling = MissingMemberHandling.Ignore,
    // 忽略null值(可选,根据你的需求调整)
    NullValueHandling = NullValueHandling.Ignore
};

Values ContactData = JsonConvert.DeserializeObject<Values>(jsonstring, serializerSettings);

3. 验证JSON字符串的有效性

如果上述调整后还是返回null,建议先验证你的jsonstring是否是有效的JSON格式,并且符合Dynamics 365 Contacts API返回的结构(比如包含@odata.context和value数组)。你可以用JSON格式化工具检查字符串是否有语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:42:52