我创建了一个充当通用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}}
答案 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
数组。