IEnumerable的Custom类和String.Join()

时间:2010-12-16 14:56:53

标签: c# collections tostring

我创建了一个充当通用DataType类的类。我这样做是因为我需要将一个misc类型的对象序列化为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(),使用ToString()的变色龙集合,String.Join()集合中的Chameleon对象​​不会被调用String.Join()方法;相反,我得到了通常的名称空间+返回的类名字符串。

为什么ToString()没有调用我的自定义JSON.Serialize(String.Join<Chameleon>(",", new [] { new Chameleon("aDate", DateTime.Now), new Chameleon("aString", "FUBAR") })); 实现?我错过了什么?


这就是我正在做的事情:

{{1}}

3 个答案:

答案 0 :(得分:3)

我的猜测是,这是因为您将ToString定义为new方法,而不是覆盖它。请尝试使用此代码:

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

答案 1 :(得分:2)

就是这样。尝试像这样定义你的ToString:

  public override String ToString() //Note the override rather than new
  {
    //Format your string etc.
  }

答案 2 :(得分:0)

您需要在每个ToString对象上放置Chameleon,否则您将拥有一个Chameleon对象数组,而不是应该使用的string数组。

相关问题