我创建了一个充当通用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
    }
}


一切都很好,但是当我尝试使用String.Join()加入(或尽量重复使用)变色龙的集合时,该集合中Chameleon对象​​上的ToString()不会被String.Join()方法调用;相反,我得到了通常的命名空间+类名字符串返回。

为什么String.Join()不调用我的自定义ToString()实现?我想念什么?

这是我在做什么:

JSON.Serialize(String.Join<Chameleon>(",", new []
{
    new Chameleon("aDate", DateTime.Now),
    new Chameleon("aString", "FUBAR")
}));

最佳答案

我的猜测是,发生这种情况是因为您将ToString定义为new方法,而不是覆盖它。请尝试以下代码:

public override String ToString()
{
    // returns internal data, formatted data according to _type
}

08-26 18:22
查看更多