JSON сериализация дженериков

У меня есть класс, который выглядел так:

public class MyData : IList<Tuple<double,double>>

Идея в том, что у вас есть список пар значений. Достаточно просто. Но я хотел, чтобы это было сериализовано так, чтобы оно выглядело как массив из массива значений типа double (т.е.double[][]), а не список кортежей. Это должно выглядеть так при сериализации:

[[1,1],[2,2],[3,3]]

Итак, я создал простойJsonConverter это сделает это. Это очень простоWriteJson метод, который выглядит так:

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
    var obj = value as MyData;
    double[][] dataArray = (from dp in obj._data
                            select new[] { dp.Item1, dp.Item2 }).ToArray();
    var ser = new JsonSerializer();
    ser.Serialize(writer, dataArray);
}

И я украшаюMyData с соответствующим атрибутом:

    [JsonConverter(typeof(MyDataJsonConverter))]
    public class MyData: IList<Tuple<double,double>>

И все работает отлично. Теперь, однако, я хочу расширить это и сделатьMyData общий:

    public class MyData<S,T>: IList<Tuple<S,T>>

И это, где я столкнулся с проблемами. Изначально я пытался сделатьMyDataJsonConverter также общий:

   [JsonConverter(typeof(MyDataJsonConverter<S,T>))]
   public class MyData<S,T>: IList<Tuple<S,T>>

Но это не разрешено, потому что вы не можете использовать дженерики с атрибутами.

Так что я должен держатьMyDataJsonConverter не универсальный, но мне нужно выяснить, как сгладить мою коллекцию кортежей в массив (предположительно изobject[][] сейчас) так, чтобы при сериализации мои данные выглядели так:

[[1,2],[2,3]]

или же:

[["foo":1],["bar":2]]

или даже:

[["foo":"bar"],["what":"ever"]]

Есть идеи, как с этим справиться? ВWriteJsonЯ больше не могу бросатьvalue вMyData потому что я не буду знать параметры типа, так что в этот момент все в значительной степени разваливается.

Я мог бы просто создать отдельные классы для каждой комбинации типов (так один дляTuple<double,double> и один дляTuple<string,double> и так далее ...), но мне было интересно, есть ли лучший способ, прежде чем я перейду на это грубой силой.

Ответы на вопрос(2)

Ваш ответ на вопрос