C#从JSON子代获取键/名称

问题描述

我从API收到此JSON响应:

{
  "type": "link","title": "One or more validation errors occurred.","status": 400,"traceId": "0000000000000","errors": {
    "inputNumber": [
      "Must be 5 characters."
    ],"inputWord": [
      "required."
    ]
  }
}

我正在使用带有AutoMapper的配置文件将响应映射到模型。这是我尝试将JSON错误属性映射到响应模型中的Dictionary<string,List<string>>属性代码

     // Map for Errors property
     .AfterMap((src,dest) =>
     {
         dest.Errors = new Dictionary<string,List<string>>();
         var jsonErrorDict = src.SelectTokens("errors").Children();

         foreach (var token in jsonErrorDict)
         {
             // Not working right: Token contains both key and value
             var key = token;
             var value = new List<string>();

             if (token.HasValues)
             {
                 var jsonErrorkeyvalues = token.Children();

                 foreach (JToken innerToken in jsonErrorkeyvalues)
                 {
                     value.Add(innerToken.ToString());
                 }

                 dest.Errors.Add(key.ToString(),value);
             }
         }

但是令牌变量同时包含键(例如“ inputNumber”)和值(“必须为5个字符”),因此在完成映射后,它看起来像这样:

"errors": {
    "\"inputNumber\": [\r\n  \"Must be 5 characters.\"\r\n]": [
      "[\r\n  \"Must be 5 characters\"\r\n]"
    ],"\"inputWord\": [\r\n  \"required\"\r\n]": [
      "[\r\n  \"required.\"\r\n]"
  }

我只是测试它并从转义的字符串中获取响应,因此请忽略\ r之类的转义符号。

如何仅获取密钥名称

编辑: 我将其添加到关键变量中:

var key = token.ToString().Split(':');

然后将其添加到dest.Errors字典中时,我会这样做:

dest.Errors.Add(key[0],value);

虽然感觉不是最好的解决方案,所以非常欢迎使用替代解决方案。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)