0
私はいくつかの答えられた質問のコードを使用してカスタムJSONコンバータを作成しようとしています。JSON配列またはJSONオブジェクトをオブジェクトのリストに変換するにはどうすればよいですか?
public class SingleValueArrayConverter<T> : JsonConverter
{
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.StartObject)
{
T instance = serializer.Deserialize<T>(reader);
return new List<T>() { instance };
}
else if (reader.TokenType == JsonToken.StartArray)
{
return serializer.Deserialize<List<T>>(reader);
}
return null;
}
public override bool CanConvert(Type objectType)
{
return true;
}
public override bool CanWrite
{
get { return false; }
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
これは私のサンプルモデルクラスです。
public class Foo
{
[JsonProperty("type")]
public string Type;
}
私は次のコードを使用して実行します。スタックオーバーフローに関するエラーが発生します。
var converter = new SingleValueArrayConverter<Foo>();
var test1 = "[{ \"type\": \"test\" }]";
var result1 = JsonConvert.DeserializeObject<List<Foo>>(test1, converter);
var test2 = "{ \"type\": \"test\" }";
var result2 = JsonConvert.DeserializeObject<List<Foo>>(test2, converter);
次のトークンでは読んでいますが、読んでいないのでストリームから削除しています。カスタムの読み取り/書き込みメソッドの中では、* reader *自体を使用する必要があります。 readメソッドがどのように動作するかの例については、[この回答](http://stackoverflow.com/a/8031283/563532)を参照してください。 – Rob