申し訳ありませんが、私の元の回答は価値がありませんでした。より良い回答があります。
これらの型を整数値と double 値 (C# プログラマーにとっては当然のこと) と見なしたため、おそらく問題に遭遇しましたが、Json はこれらの型について何も知らず、数値を単純に 10 進数として表します。
別の答えが言ったように、ダブルのリストのリストとして単純に逆シリアル化できます。興味深いことに、より自然な表現に変換するオプションがあります。
ただし、逆シリアル化するときに正確にタイプセーフではないため、これはお勧めしません (10 進数に変換すると元の要素の型が失われます。この方法が機能すると想定することしかできません)。
public class BarArrayConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
// Not properly implemented!
return true;
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
List<Bar> bars = new List<Bar>();
// Read the first token after the start array
reader.Read();
// Parse elements of the array
while (reader.TokenType == JsonToken.StartArray)
{
Bar b = new Bar();
// Convert these as necessary to your internal structure. Note that they are nullable types.
b.First = reader.ReadAsDecimal();
b.Second = reader.ReadAsDecimal();
// Read end array for this element
reader.Read();
// Pull off next array in list, or end of list
reader.Read();
bars.Add(b);
}
return bars;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
class Bar
{
public decimal? First;
public decimal? Second;
}
class Foo
{
[JsonProperty("title")]
public string Title { get; set; }
[JsonConverter(typeof(BarArrayConverter))]
[JsonProperty("raw_data")]
public List<Bar> RawData { get; set; }
}
ほとんどの場合、10 進数型を使用する方が賢明です。これを行う唯一の理由は、最初の値を整数のままにしておく必要がある場合、これはより自然な方法で変数の値を制限する方法になるということです。