我有一些有效但有点古怪的JSON。这是:
{
"server":"some server name",
"files":
{
"filename1":{"source":"original","format":"text"},
"filename2":{"source":"original","format":"text"},
"filename3":{"source":"original","format":"text"}
}
}
正如您所看到的,“files”部分每个“文件”包含一个JSON对象,因此我可以将其作为JTokens数组获取但不确定如何获取“filename1”,“filename2”等的值。
我正在使用JSON.NET和C#所以请不要提供需要来自System.Web.Extensions.dll的JavaScriptSerializer的答案。纯JObject / JToken调用或JConvert.DeserializeObject<>没关系。
感谢。
答案 0 :(得分:2)
试试这个
public class Data
{
public Data()
{
Files = new Dictionary<string, FileData>();
}
public string Server { get; set; }
public IDictionary<string, FileData> Files { get; set; }
}
public class FileData
{
public string Source { get; set; }
public string Format { get; set; }
}
然后使用此
访问它var result = JsonConvert.DeserializeObject<Data>(JsonValue);
答案 1 :(得分:2)
如何使用动态反序列化?见Deserialize json object into dynamic object using Json.net
string json = @"{""server"":""some server name"",""files"":{""filename1"":{""source"":""original"",""format"":""text""},""filename2"":{""source"":""original"",""format"":""text""},""filename3"":{""source"":""original"",""format"":""text""}}}";
dynamic result = JObject.Parse(json);
Console.WriteLine(result.server);
foreach (dynamic file in result.files)
{
Console.WriteLine(file.Name);
dynamic value = file.Value;
Console.WriteLine(value.source);
Console.WriteLine(value.format);
}
输出
some server name
filename1
original
text
filename2
original
text
filename3
original
text
答案 2 :(得分:1)
您必须定义这样的类:
class ClassName
{
public string server;
public ClassName2 files;
}
并定义ClassName2:
class ClassName2
{
ClassName3 filename1;
ClassName3 filename2;
ClassName3 filename3;
}
最后是ClassName3
ClassName3
{
public string source;
public string format;
}
支持您已将json数据保存在字符串变量中,例如'result'
ClassName fin = JsonConvert.DeserializeObject<ClassName>(result);
这将为您提供所需的一切。