Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何解析这个JSON(使用JSON.NET)?_C#_Json_Json.net - Fatal编程技术网

C# 如何解析这个JSON(使用JSON.NET)?

C# 如何解析这个JSON(使用JSON.NET)?,c#,json,json.net,C#,Json,Json.net,我有一些JSON是有效的,但有点古怪。这是: { "server":"some server name", "files": { "filename1":{"source":"original","format":"text"}, "filename2":{"source":"original","format":"text"}, "filename3":{"source":"original","format":"text"} } } 如您所见,“文件”部分每个“文件”包含一个JSON对象,

我有一些JSON是有效的,但有点古怪。这是:

{
"server":"some server name",
"files":
{
"filename1":{"source":"original","format":"text"},
"filename2":{"source":"original","format":"text"},
"filename3":{"source":"original","format":"text"}
}
}
如您所见,“文件”部分每个“文件”包含一个JSON对象,因此我可以将其作为JToken数组,但不确定如何获取“filename1”、“filename2”等值

我使用的是JSON.NET和C#,因此请不要提供需要System.Web.Extensions.dll中的JavaScriptSerializer的答案。纯JObject/JToken调用或JConvert.DeserializeObject都可以


谢谢。

您必须定义如下类:

class ClassName
{
    public string server;
    public ClassName2 files;
}
并定义ClassName2:

class ClassName2
{
    ClassName3 filename1;
    ClassName3 filename2;
    ClassName3 filename3;
}
最后是类名3

ClassName3
{
    public string source;
    public string format;
}
支持将json数据保存在字符串变量中,如“result”

 ClassName fin = JsonConvert.DeserializeObject<ClassName>(result);
ClassName fin=JsonConvert.DeserializeObject(结果);

这将为您提供所需的任何内容。

您必须定义如下类:

class ClassName
{
    public string server;
    public ClassName2 files;
}
并定义ClassName2:

class ClassName2
{
    ClassName3 filename1;
    ClassName3 filename2;
    ClassName3 filename3;
}
最后是类名3

ClassName3
{
    public string source;
    public string format;
}
支持将json数据保存在字符串变量中,如“result”

 ClassName fin = JsonConvert.DeserializeObject<ClassName>(result);
ClassName fin=JsonConvert.DeserializeObject(结果);
这会给你任何你需要的东西。

试试这个

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; }
}
公共类数据
{
公共数据()
{
Files=新字典();
}
公共字符串服务器{get;set;}
公共IDictionary文件{get;set;}
}
公共类文件数据
{
公共字符串源{get;set;}
公共字符串格式{get;set;}
}
然后使用以下命令访问它

var result = JsonConvert.DeserializeObject<Data>(JsonValue);
var result=JsonConvert.DeserializeObject(JsonValue);
试试这个

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; }
}
公共类数据
{
公共数据()
{
Files=新字典();
}
公共字符串服务器{get;set;}
公共IDictionary文件{get;set;}
}
公共类文件数据
{
公共字符串源{get;set;}
公共字符串格式{get;set;}
}
然后使用以下命令访问它

var result = JsonConvert.DeserializeObject<Data>(JsonValue);
var result=JsonConvert.DeserializeObject(JsonValue);

使用动态反序列化如何?看

输出

some server name
filename1
original
text
filename2
original
text
filename3
original
text

使用动态反序列化怎么样?看

输出

some server name
filename1
original
text
filename2
original
text
filename3
original
text

你是否坚持使用这种格式?是的,这是一种来自服务器的格式,无法更改。如果我可以更改JSON,为什么不将属性组合到{server:“name”,files:{filename:,“file1”,format:“text”,source:“original”}}}@lafama,但这不是问题。这个JSON输出的问题是如何获取文件名值?您是否坚持使用该格式?是的,它是来自服务器的格式,无法更改。为什么不将属性组合到{server:“name”,files:{filename:,“file1”,format:“text”,source:“original”}}@lafama如果我能更改JSON,我会的,但这不是问题所在。这个JSON输出的问题是我如何获得文件名值?这很好,不管怎样都可以。数据集中的文件名不同。因此,虽然这在我发布的代码片段中起作用,但当出现“filename10”或“filename_123.zip”时,它就不起作用了。这些名称是动态的,在运行时确定,并且每次调用都会有所不同,因此需要一些能够处理它们的东西。如果您的文件名是动态的,那么最好将它们定义为数组。同意,只是看看如何做到这一点(尽管我正在处理下面提出的@lafama答案,看起来它会起作用)这是好的,不管怎样,只要一个陷阱就行了。数据集中的文件名不同。因此,虽然这在我发布的代码片段中起作用,但当出现“filename10”或“filename_123.zip”时,它就不起作用了。这些名称是动态的,在运行时确定,并且每次调用都会有所不同,因此需要一些能够处理它们的东西。如果您的文件名是动态的,那么最好将它们定义为数组。同意,只是看看如何做到这一点(尽管我正在处理下面提出的@lafama答案,看起来它会起作用)应该注意OP想要的值可以从
result.Files.Keys
枚举。应该注意OP想要的值可以从
result.Files.Keys