【问题标题】:Deserialize json to Dictionary<string, string> in C# applicaiton [duplicate]在 C# 应用程序中将 json 反序列化为 Dictionary<string, string> [重复]
【发布时间】:2021-04-24 11:40:06
【问题描述】:

我有这门课:

public class ParseJson
    {
        private HttpClient _client;

        public ParseJson()
        {
            _client = new HttpClient();
        }
        public async Task<List<Calibration>> LoadJsonAsync()
        {
            using (StreamReader r = new StreamReader("Json\\calibration.json"))
            {
                string responseString = r.ReadToEnd();
                Console.WriteLine("responseString: " + responseString);

                try
                {
                    var values = JsonConvert.DeserializeObject<Dictionary<string, string>>(responseString);
                
                    if ((values["DataType"]).Equals("Calibration_Symptoms"))
                    {

                        calibrationClass.CalibrationData(values: values);

                        }
                    }
                catch (Exception e)
                {
                    Console.WriteLine("Json Exception: " + e);
                }


                List<Calibration> items = JsonConvert.DeserializeObject<List<Calibration>>(responseString);
                return items;
            }
        }
    }

当我运行它时,我得到了这个异常:

Json 异常:Newtonsoft.Json.JsonSerializationException:将值“DataType”转换为类型“System.Collections.Generic.Dictionary2[System.String,System.String]'. Path '', line 1, position 10. ---&gt; System.ArgumentException: Could not cast or convert from System.String to System.Collections.Generic.Dictionary2[System.String,System.String] 时出错。 在 Newtonsoft.Json.Utilities.ConvertUtils.EnsureTypeAssignable(对象值,类型 initialType,类型 targetType) 在 Newtonsoft.Json.Utilities.ConvertUtils.ConvertOrCast(对象初始值,CultureInfo 文化,类型 targetType) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.EnsureType(JsonReader 阅读器,对象值,CultureInfo 文化,JsonContract 合同,类型 targetType) --- 内部异常堆栈跟踪结束 --- 在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.EnsureType(JsonReader 阅读器,对象值,CultureInfo 文化,JsonContract 合同,类型 targetType) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader 阅读器,类型 objectType,JsonContract 合同,JsonProperty 成员,JsonContainerContract containerContract,JsonProperty containerMember,对象现有值) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader 阅读器,类型 objectType,布尔 checkAdditionalContent) 在 Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader 阅读器,类型 objectType) 在 Newtonsoft.Json.JsonConvert.DeserializeObject(字符串值,类型类型,JsonSerializerSettings 设置) 在 Newtonsoft.Json.JsonConvert.DeserializeObject[T](字符串值,JsonSerializerSettings 设置) 在 Newtonsoft.Json.JsonConvert.DeserializeObject[T](字符串值) 在 C:\Users\User\source\repos\HelloWorld\ParseJson.cs: 31 行中的 HelloWorld.ParseJson.d__2.MoveNext() 处

我知道我可以创建一个模型并对其进行反序列化,但最终我希望读取不同的 Json 并对其进行反序列化。

有什么办法可以将其反序列化为Dictionary&lt;string, string&gt;

仅供参考,这是我目前使用的 json:

"DataType": "Calibration_Symptoms",
    "playerHeight": 1.6739861965179443,
    "armSpan": 1.572389006614685,
    "calibratedHeadPosition": {
        "x": 0.10129322111606598,
        "y": 1.6739861965179443,
        "z": -0.01975761353969574
    },
    "symptomSeverity": 0,
    "scat5SymptomsQs": [],
    "rightHanded": true,
    "rightFooted": true,
    "testType": false,
    "trialSymptomsQs": {
        "Gait": [1, 2, 3],
        "Balance1": []
    }
}

【问题讨论】:

标签: c# .net json.net json-deserialization


【解决方案1】:

我把它改成了var values = JsonConvert.DeserializeObject&lt;Dictionary&lt;string, object&gt;&gt;(responseString);

【讨论】:

  • 一切都成功了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-15
  • 2020-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多