1

有効なJSONがいくつかありますが、見た目が少し風変わりです。ここにあります:

{
"server":"some server name",
"files":
{
"filename1":{"source":"original","format":"text"},
"filename2":{"source":"original","format":"text"},
"filename3":{"source":"original","format":"text"}
}
}

ご覧のとおり、「files」セクションには「file」ごとに 1 つの JSON オブジェクトが含まれているため、これを JToken の配列として取得できますが、「filename1」、「filename2」などの値を取得する方法がわかりません。

JSON.NET と C# を使用しているため、System.Web.Extensions.dll の JavaScriptSerializer を必要とする回答は提供しないでください。純粋な JObject/JToken 呼び出しまたは JConvert.DeserializeObject<> のいずれかで問題ありません。

ありがとう。

4

3 に答える 3

2

動的デシリアライゼーションを使用するのはどうですか? Json.net を使用して json オブジェクトを動的オブジェクトに逆シリアル化するを参照してください。

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
于 2013-02-05T20:28:34.150 に答える
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);
于 2013-02-05T20:22:07.923 に答える
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);

これにより、必要なものがすべて提供されます。

于 2013-02-05T20:10:53.743 に答える