【问题标题】:Overriding ToString() in JValue and Json class在 JValue 和 Json 类中覆盖 ToString()
【发布时间】:2017-02-21 23:50:28
【问题描述】:

我坚持的部分任务如下:

在 JSON 示例 here 中覆盖 JValue 和 JsonValue 类的 ToString 方法。 输出的格式应该很好,以便于阅读。

我可以用这段代码覆盖 JValue ToString 方法。

public override string ToString() {
    return Type.ToString() + ": " + Value.ToString();          
}

这成功地将 Type 属性作为字符串返回。但是,Value 属性返回为“Json.JsonObject”。 (提供的代码在上面顺便链接了)。

我的导师告诉我们,这可以通过两个覆盖来完成,所以我假设第二个覆盖在 JsonValue 基类中。我不知道如何访问派生类中的值。

我可以单独覆盖每个派生类的 ToString 方法,但这超出了我的 2 次覆盖限制,并且似乎仍然不适用于列表和字典。

希望这不是太模糊,但如果是的话,我基本上只需要帮助编写两个覆盖方法,以便如果我要运行这段代码:

var json = new JValue { Object = new Dictionary<string, JValue>() };
json["name"] = new JValue("Joe Smith");
json["age"] = new JValue(31); 
if (json.Type == JType.Object)
{
        foreach (var value in json.Object)
        {
            System.Console.WriteLine(json.ToString())
        }
}

它将字典中的每个JType和键值一一返回。

到目前为止,我得到的输出类似于“Object: Json.JsonObject.

任何指导将不胜感激!

【问题讨论】:

    标签: c# json tostring


    【解决方案1】:

    将此添加到以下派生类:JsonBool、JsonNumber、JsonString,

    public override string ToString()
    {
        return Value.ToString();
    }
    

    另外,主要是你想要的:

    foreach (var value in json.Object)
    {
        System.Console.WriteLine(value.ToString());
    }
    

    您希望每个值而不是整个对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      • 1970-01-01
      • 2012-09-15
      • 1970-01-01
      • 2012-03-28
      相关资源
      最近更新 更多