【问题标题】:WebAPI2 - RestSharp - NewtonsoftJson Deserialization crashes at end of contentWeb API 2 - RestSharp - Newtonsoft Json 反序列化在内容结束时崩溃
【发布时间】:2016-03-22 01:55:48
【问题描述】:

我有一个让我发疯的问题。我使用 RestSharp 在 WebAPI2 上成功构建了几个休息服务和客户端。突然间,我什至无法让最简单的程序(见下文)工作。我目前正在尝试显式使用 Newtonsoft.JSON 进行序列化和反序列化。我安装了 Json 库的 7.0.2 版本,它似乎取代了 MS 在 VS2015 中提供的版本 6。我包括下面的所有代码。请注意,服务器似乎工作正常,已通过 Fiddler 验证。我确实注意到,当我开始使用 Newtonsoft 库时,它在以前没有发生的所有 '"' 上添加了转义符。但是结果是相同的 - 它错误表明问题多于指示的“内容”1 个字符长度”。

注意:我是 C# 的新手,但在 C/C++ 方面有 25 年以上的经验;我确信这是我想念的愚蠢的东西,但我已经追了大约 3 个晚上了,但没有任何运气。提前致谢!

WebAPI2 配置:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;

namespace webapi2_server
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services
            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "{controller}",
                defaults: new {  }
            );
        }
    }
}

WebAPI2 控制器:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using Newtonsoft.Json;

public class my_data
{
    public string sdata { get; set; }
    public int    idata { get; set;  }
}


namespace webapi2_server.Controllers
{
    public class TestController : ApiController
    {

        public HttpResponseMessage Get(HttpRequestMessage request)
        {
            HttpResponseMessage response;
            List<my_data> myTestData = new List<my_data>();

            myTestData.Add(new my_data() { sdata = "string1", idata = 1 });
            myTestData.Add(new my_data() { sdata = "string2", idata = 2 });
            myTestData.Add(new my_data() { sdata = "string3", idata = 3 });

            string json = JsonConvert.SerializeObject(myTestData,     Formatting.Indented);

            return response = request.CreateResponse(HttpStatusCode.OK, json);
        }
    }
}

客户端软件:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using RestSharp;


public class my_data
{
    public string sdata { get; set; }
    public int idata { get; set; }
}

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {

            RestClient client = new RestClient();
            client.BaseUrl = new Uri("Http://192.168.0.6");

            var request = new RestRequest();
            request.Resource = "test/test";
            request.Method = Method.GET;
            request.RequestFormat = DataFormat.Json;

            List<my_data> my_data_response = new List<my_data>();

            IRestResponse<List<my_data>> response = client.Execute<List<my_data>>(request);

            my_data_response = JsonConvert.DeserializeObject<List<my_data>>(response.Content);

            System.Console.WriteLine("Response String: " + response.Content);
            System.Console.WriteLine("Item Count: " + my_data_response.Count() );

        }
    }
}

运行客户端的输出:

未处理的异常:Newtonsoft.Json.JsonSerializationException:错误转换值“[ { "sdata": "string1", “idata”:1 }, { "sdata": "string2", “idata”:2 }, { "sdata": "string3", “idata”:3 } ]" 输入 'System.Collections.Generic.List1[my_data]'. Path '', line 1, position 205. ---&gt; System.ArgumentException: Could not cast or convert from System.String to System.Collections.Generic.List1[my_data]。 在 Newtonsoft.Json.Utilities.ConvertUtils.EnsureTypeAssignable(对象值,类型 initialType,类型 targetType) 在 Newtonsoft.Json.Utilities.ConvertUtils.ConvertOrCast(对象初始值,CultureInfo 文化,类型 targetType) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.EnsureType(JsonReader 阅读器,对象值,CultureInfo 文化,JsonContract 合同,类型 targetType) --- 内部异常堆栈跟踪结束 ---enter code here

【问题讨论】:

    标签: c# asp.net json deserialization restsharp


    【解决方案1】:

    好吧,我现在可以通过简单地不使用 Newtonsoft.Json 而只使用 MS 的东西来工作,这并没有进行转义。但是,我也遇到了问题,这就是我尝试使用 JSOFT 开始的原因。我看到评论说 MS 序列化与 List...

    存在问题

    这对我来说没有意义 - 我想如果我用 Newtonsoft 进行序列化和反序列化,它应该可以工作......

    当我回到现实世界的问题时,不确定这是否会起作用,但我会看看会发生什么。如果有人看到发布的问题,请告诉我。谢谢!

    【讨论】:

      猜你喜欢
      • 2022-01-20
      • 1970-01-01
      • 2013-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多