【问题标题】:'Cannot cast Newtonsoft.Json.Linq.JArray to Newtonsoft.Json.Linq.JToken'不能将 Newtonsoft.Json.Linq.JArray 转换为 Newtonsoft.Json.Linq.JToken
【发布时间】:2020-11-12 06:49:06
【问题描述】:

我正在做一个项目,我是 C# 新手, 我无法弄清楚这个问题 下面是完整的类

public class ApexJson
{
    public JObject Json;

    public ApexJson()
    {
        this.Json = new JObject();
    }

    public JProperty Set(string name, object content)
    {
        var prop = new JProperty(name, content);
        this.Json.Add(name, JValue.FromObject(content));
        return prop;
    }

    public T Get<T>(string name)
    {
        try
        {
            T prop = Json.Value<T>(name);

            return prop;
        }
        catch
        {
            return default(T);
        }
    }

    public NameValueCollection GetNv(string name)
    {
        return Get<NameValueCollection>(name);

    }
}

并且这个函数给出了'Cannot cast Newtonsoft.Json.Linq.JArray to Newtonsoft.Json.Linq.JToken'的错误

public T Get<T>(string name)
{
    try
    {
        T prop = Json.Value<T>(name);

        return prop;
    }
    catch
    {
        return default(T);
    }
}

可能的解决方案是什么?

【问题讨论】:

  • 请添加 minimal reproducible example 和/或 json 这对你来说是失败的。但似乎你有 json 数组(即 "[ {'prop':1}, {'prop':2} ]" 或只是 [ 1,2,3,4 ] 之类的 name 的属性) - 它不能变成 NameValueCollection
  • 你能指导一下我需要对代码进行哪些更改吗?
  • 如果没有所有需要的代码和实际任务,很难做到这一点,但首先建议不要为数组属性调用GetNv

标签: c# asp.net json asp.net-core json.net


【解决方案1】:

您好,欢迎使用 C#。

错误似乎不在显示的代码中。

使用你的课程,如果我运行这个:

            ApexJson a = new ApexJson();
            a.Set("foo", 42);
            Console.WriteLine(a.Get<int>("foo"));

我明白了:

42

事实上,如果我运行这个:

            ApexJson a = new ApexJson();
            a.Set("foo", new JArray(42));
            Console.WriteLine(a.Get<JToken>("foo"));

我明白了:

[
  42
]

我假设您在未显示的代码部分中做了一些讨厌的事情

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    • 2012-11-13
    相关资源
    最近更新 更多