Я создал класс, который действует как универсальный класс DataType. Я делаю это, потому что мне нужно сериализовать коллекцию объектов с ошибкой типизации в JSON, и я хотел бы иметь возможность создавать полный набор данных в виде коллекции. Вот так:
JSON.Serialize(new []
{
new Chameleon("aDate", DateTime.Now),
new Chameleon("aString", "FUBAR")
});
Ниже приведена упрощенная версия моей реализации:
class Chameleon
{
private String _type;
private String _key;
private Object _value;
public Chameleon(String key, String value)
{
_type = "string";
_key = key;
_value = value;
}
public Chameleon(String key, DateTime value)
{
_type = "string";
_key = key;
_value = value;
}
public new String ToString()
{
// returns internal data, formatted data according to _type
}
}
Это все хорошо, но когда я пытаюсь присоединиться - или объединить, если хотите - коллекция Chameleon, использующая String.Join()
, ToString()
для объектов Chameleon в коллекции, не вызывается методом String.Join()
; вместо этого я получаю обычное возвращенное пространство имен + строка с именем класса.
Почему String.Join()
не вызывает мою пользовательскую ToString()
реализацию? Что мне не хватает?
Вот что я делаю:
JSON.Serialize(String.Join<Chameleon>(",", new []
{
new Chameleon("aDate", DateTime.Now),
new Chameleon("aString", "FUBAR")
}));