C# JSON反序列化失败求助:解析APIM用户数据报错
解决APIM用户JSON反序列化错误问题
我一眼就瞅出问题出在properties.groups的类型不匹配上!错误提示里说遇到了{字符,这说明JSON里的groups数组元素是对象,但你在C#类里把groups定义成了IEnumerable<string>——期望字符串结果拿到了对象,反序列化自然就崩了。
问题根源
你提供的示例JSON里groups是空数组[],但实际APIM返回的groups数组(当用户归属某些组时)每个元素都是包含id等属性的对象,比如真实返回的结构可能是这样:
"groups": [ { "id": "/subscriptions/xxxx/resourceGroups/xxx/providers/Microsoft.ApiManagement/service/xxx/groups/xxx" } ]
而你的代码把groups声明为字符串集合,完全不匹配这个结构,直接触发了反序列化错误。
修复方案
- 创建组引用类:先定义一个对应APIM组引用结构的类,用来匹配JSON格式:
public class APIMGroupReference { [JsonProperty("id")] public string Id { get; set; } // 如果需要其他属性(比如组名称name),可以在这里添加对应的JsonProperty和属性 }
- 修改Groups属性类型:在
NewUserAPIMResultingDataProperties类里,把groups的类型从IEnumerable<string>改成IEnumerable<APIMGroupReference>:
[JsonProperty("groups")] public IEnumerable<APIMGroupReference> groups { get; set; }
- 验证其他结构:你的
identities类定义是正确的,和JSON里的身份结构完全匹配,不需要修改。
额外排查建议
如果还是不确定APIM返回的真实JSON结构,可以先把stringContent打印出来,看看实际返回的groups到底是什么样子,这样能更精准地调整类结构。另外,建议给反序列化加个错误捕获,方便快速定位问题:
try { newUserResult = JsonConvert.DeserializeObject<NewUserAPIMResultingData>(stringContent); } catch (JsonSerializationException ex) { Console.WriteLine($"反序列化错误详情:{ex.Message}"); Console.WriteLine($"实际返回的JSON内容:{stringContent}"); }
这样调整后应该就能正常反序列化啦!
内容的提问来源于stack exchange,提问作者Sergio Solorzano
相关产品推荐
相关产品推荐

