没有服务参考的项目。错误:类型“Newtonsoft.Json.Linq.JToken”是一个不受支持的递归收集数据协定。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了没有服务参考的项目。错误:类型“Newtonsoft.Json.Linq.JToken”是一个不受支持的递归收集数据协定。相关的知识,希望对你有一定的参考价值。

我正在尝试编写一个包含newtonsoft JSON.net组件的Web API。

我的代码很简单:

     public object GetJsonFile(int id = 1) {
        using (StreamReader r = new StreamReader(myJsonFile)) {
            string json;

        //    todo: build logic to only grab latest when an id is supplied
        json = r.ReadToEnd();

        object jsonObject = JsonConvert.DeserializeObject(json);
        return jsonObject;
       }

在测试页面时,我得到了可怕的“Type”Newtonsoft.Json.Linq.JToken'是一个不受支持的递归集合数据契约。考虑修改集合'Newtonsoft.Json.Linq.JToken'的定义来删除对本身。”错误。

我已经完成了挖掘工作,并且每个人似乎都建议取消选中“在所有引用的程序集中重用类型”,但这似乎只用于服务引用,我的项目不使用。我确实找到了这样做的地方,但看到我没有引用服务,我无法配置它。

我不是那个在Visual Studio中的家,所以请放轻松我;)

答案

我从未设法弄清楚如何回避这一点。我最终做的是将JSON中的实体创建为类,并让JSON.NET将JSON反序列化为该类。

另一答案

使用Json.Net设置序列化正确的设置:

对于您的web.api控制器InvalidDataContract异常使用:

        public static void Register(HttpConfiguration config)
        {
            config.Formatters.JsonFormatter.SerializerSettings = new JsonSerializerSettings()
            {
                Formatting = Formatting.Indented,
                TypeNameHandling = TypeNameHandling.Auto,
                ContractResolver = new CamelCasePropertyNamesContractResolver(),
                NullValueHandling = NullValueHandling.Ignore,
                ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore

        }; 

JsonConvert用法的Json.Net默认设置:

JsonConvert.DefaultSettings = () => new JsonSerializerSettings()
                {
                    Formatting = Formatting.Indented,
                    TypeNameHandling = TypeNameHandling.Auto,
                    ContractResolver = new CamelCasePropertyNamesContractResolver(),
                    NullValueHandling = NullValueHandling.Ignore,
                    ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore

            };

以上是关于没有服务参考的项目。错误:类型“Newtonsoft.Json.Linq.JToken”是一个不受支持的递归收集数据协定。的主要内容,如果未能解决你的问题,请参考以下文章

C#中,运行程序时提示:无法直接启动还有类库输出类型的项目?

ProjectScopeServices 错误中没有可用的工厂类型服务

java项目页面为啥会超时?

HTTP 400 错误

Dalvik - 将java文件添加到项目时局部变量类型不匹配 - 没有proguard [重复]

关闭定位服务时出现“发生错误”消息