サーバーの応答を処理する必要があるクライアント アプリケーションを作成しています。応答は JSON です。Json.NET を使用してそれらを逆シリアル化することにしました。そして、これらの応答を (サーバー側で) 単純化または変更することはできませんでした。この特定の JSON 応答の特定の問題は、異なるオブジェクト タイプが同じ配列 (ファイルのハッシュと配列) にあることです。したがって、この配列を、オブジェクトの配列ではなく、厳密に型指定されたオブジェクトに直接デシリアライズしたいと思います。で達成できるはずだと思いますがCustomCreationConverter
、方法がわかりませんでした。
JSON:
{
"files":
[
"hash string",
[
["first file name", 12],
["second file name", 34]
]
]
}
私が達成しようとしているオブジェクト構造:
public class RootObject
{
[JsonProperty("files")]
public FilesContainer Container
{
get;
set;
}
}
public class FilesContainer
{
public string Hash
{
get;
set;
}
public File[] Files
{
get;
set;
}
}
[JsonConverter(typeof(FileJsonConverter))]
public class File
{
public string Name
{
get;
set;
}
public int Size
{
get;
set;
}
}
class FileJsonConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
throw new NotImplementedException();
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
File obj = new File
{
Name = reader.ReadAsString(),
Size = reader.ReadAsInt32().GetValueOrDefault()
};
reader.Read();
return obj;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}