C# NewtonSoft Json无效强制转换异常

C# NewtonSoft Json无效强制转换异常,c#,json,json.net,C#,Json,Json.net,这与我的问题有关,但差别很大,国际海事组织认为有必要单独提出一个问题 在另一个问题中,我试图找出如何处理破坏2G请求缓冲区的问题。这个想法是使用流媒体,但我需要反序列化。在与Google教授交谈时,我发现我必须使用TextReader来流式/反序列化。所以我的代码是: public async Task<API_Json_Special_Feeds.RootObject> walMart_Special_Feed_Lookup(string url) {

这与我的问题有关,但差别很大,国际海事组织认为有必要单独提出一个问题

在另一个问题中,我试图找出如何处理破坏2G请求缓冲区的问题。这个想法是使用流媒体,但我需要反序列化。在与Google教授交谈时,我发现我必须使用TextReader来流式/反序列化。所以我的代码是:

    public async Task<API_Json_Special_Feeds.RootObject> walMart_Special_Feed_Lookup(string url)
    {
        special_Feed_Lookup_Working = true;
        HttpClientHandler handler = new HttpClientHandler()
        {
            AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
        };
        using (HttpClient http = new HttpClient(handler))
        {

            http.DefaultRequestHeaders.AcceptEncoding.Add(new System.Net.Http.Headers.StringWithQualityHeaderValue("gzip"));
            http.Timeout = TimeSpan.FromMilliseconds(Timeout.Infinite);
            url = String.Format(url);
            using (var response = await http.GetAsync(url, HttpCompletionOption.ResponseHeadersRead))
            {
                Console.WriteLine(response);
                var serializer = new JsonSerializer();

                using (StreamReader sr = new StreamReader(await response.Content.ReadAsStreamAsync()))
                {
                    using (var jsonTextReader = new JsonTextReader(sr))
                    {
                        API_Json_Special_Feeds.RootObject root = (API_Json_Special_Feeds.RootObject)serializer.Deserialize(jsonTextReader);
                        return root;
                    }
                }
            }
        }
    }
因此,我们一直都有匹配类型API_Json_Special_Feeds.RootMethod

运行时,呼叫线路抛出InvalidCastException:

意外结果:

Unable to cast object of type 'Newtonsoft.Json.Linq.JObject' to type 'RootObject'
在返回之前,我在方法的末尾进行了检查,结果确实是在返回之前从一个对象强制转换为API_Json_Special_Feeds.RootMethod

问题:在return语句和调用行之间的某个地方,返回的对象正在从API_Json_Special_Feeds.RootMethod转换为Newtonsoft.Json.Linq.JObject。我无法调试它,因为两者之间没有代码。如果我在呼叫线路中再次施法,则会出现“无法施法”错误。如何防止此对象类型的降级/更改


很多很多人都在为你的时间、考虑以及你能提供的任何想法或建议而思考

您需要使用通用重载

var root=serializer.Deserialize,其中c#类型信息可以包含在JSON文件中(例如JSON.NET文件),但仍然需要将JSON反序列化为适当的显式基类。)


有关从流中反序列化强类型c#对象的另一个示例,请参见。

谢谢!到目前为止,这是行不通的。我正试图找出它被卡住的地方,我会报告的。无错误-加载响应并且从不返回任何内容
Unable to cast object of type 'Newtonsoft.Json.Linq.JObject' to type 'RootObject'
var root = serializer.Deserialize<API_Json_Special_Feeds.RootObject>(jsonTextReader);