繁体   English   中英

在 C# 中读取 JSON 字符串

[英]Reading JSON string in C#

我有 JSON 文件格式的数据,如

{
   "default":{
    "name":"username",
    "school":"school_name"
    },
    
    "type1":{
    "name":"studentname",
    "school":"schoolName"
    },
    
    "type2":{
    "name":"user_name",
    "school":"schooltitle"
    }
}

我正在使用读取数据

Dictionary<string,string> values = JsonConvert.DeserializeObject< Dictionary<string,string> >( json )

其中 json 是来自 json 文件的文本。 我想访问特定的代码块,例如如果 student 是类型 1,则检查该类型是否存在并访问该块,否则访问默认块。 怎么做? 我想要内部块值作为键值对

如果我们修复了缺少的 Json ,您应该能够将其Deserialize Dictionary<string, Dictionary<string, string>>

var innerData = new Dictionary<string, string>{
    {"name", "username"}, 
    {"school", "school_name"}
};
var data = new Dictionary<string, Dictionary<string, string>>{
    {"default", innerData}, 
    {"type1", innerData}, 
    {"type2", innerData}, 
};      

string inputJson = JsonConvert.SerializeObject(data);

请注意,生成的 Json 与您的匹配:

{
 "default":{"name":"username", "school":"school_name"}
 , "type1":{"name":"username", "school":"school_name"}
 , "type2":{"name":"username", "school":"school_name"}
}

和去盐化:

var result = JsonConvert.DeserializeObject< Dictionary<string, Dictionary<string, string>> >(inputJson);

var type1Element = result["type1"];
foreach(var keyValue in type1Element){
    Console.WriteLine("{keyValue.Key} => {keyValue.Value}");

}

在线演示

我希望下面的代码会起作用。 (虽然我没有测试过)

JObject jsonObject = (JObject)JsonConvert.DeserializeObject(your_json);
string selectedBlock;
string to_check = "type1"; // I have hardcoded this for example

try
{ 
if((string)jsonObject.SelectToken(to_check)!=null)
selectedBlock = (string)jsonObject.SelectToken(to_check);
else
selectedBlock = (string)jsonObject.SelectToken("default");
}
catch (Exception e)
{
throw e;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM