如何在C#中将JSON字符串解析为名称-值对

3

我需要解析JSON字符串为名称和值对列表:

{"vars":[
 {"name":"abcd","value":"true"},
 {"name":"efgh","value":"false"},
 {"name":"xyz","value":"sring1"},
 {"name":"ghi","value":"string2"},
 {"name":"jkl","value":"num1"}
 ],"OtherNames":["String12345"]}    

由于涉及多个方面,我无法添加对newtonsoft JsonConvert的引用。

使用JavaScriptSerializer,当我的string中只有一个值而不是一个array时,我能够将json转换为名称值。

 JavaScriptSerializer jsSerializer = new JavaScriptSerializer();
 Dictionary<string,string> dict = jsSerializer.Deserialize<Dictionary<string, string>>(jsonText);

我认为声明表明我将获取数组值的部分缺失了。

请查看以下链接:https://stackoverflow.com/questions/13352695/how-to-map-json-values-onto-a-different-class-with-gson - Abhishek
http://json2csharp.com是您进行转换的一站式服务平台... - DavidG
1个回答

3
您无法将该Json反序列化为Dictionary<string, string>。因为该json包含两个不同的数组,您应该使用复杂对象进行反序列化,如下所示;
public class Var
{
    public string name { get; set; }
    public string value { get; set; }
}

public class SampleJson
{
    public List<Var> vars { get; set; }
    public List<string> OtherNames { get; set; }
}


JavaScriptSerializer jsSerializer = new JavaScriptSerializer();
var sampleJson = jsSerializer.Deserialize<SampleJson>(jsonText);

当我尝试添加以下内容时,出现了以下错误: 类型“SampleJson”不支持数组的反序列化。 在System.Web.Script.Serialization.ObjectConverter.ConvertListToObject(IList list, Type type, JavaScriptSerializer serializer, Boolean throwOnError, IList& convertedList)处 在System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeInternal(Object o, Type type, JavaScriptSerializer serializer, Boolean throwOnError, Object& convertedObject)处 - VaasLolla
你确定你要反序列化的 JSON 字符串和你在问题中分享的 JSON 是相同的吗? - lucky
由于之前的错误是无效的数组,显示"["作为原因,我尝试通过删除相同的内容来解决它。除了json中的"["在其中间,我将所有的内容都保留在同一个字符串中。 - VaasLolla
这是我使用的字符串.. {"vars":[ {"name":"abcd","value":"true"}, {"name":"efgh","value":"false"}, {"name":"xyz","value":"sring1"}, {"name":"ghi","value":"string2"}, {"name":"jkl","value":"num1"} ,"OtherNames":"String12345"}] - VaasLolla
你试图反序列化的 JSON 格式不正确。请在此处检查:https://jsonformatter.curiousconcept.com/ - lucky
这个 JSON 字符串被纠正后,它立刻生效了。 - VaasLolla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接