C# WebAPI2-RestSharp-NewtonsoftJson反序列化在内容结束时崩溃

C# WebAPI2-RestSharp-NewtonsoftJson反序列化在内容结束时崩溃,c#,asp.net,json,deserialization,restsharp,C#,Asp.net,Json,Deserialization,Restsharp,我有一个让我发疯的问题。我使用RestSharp成功地在WebAPI2上构建了两个rest服务和客户端。突然间,我连最简单的程序(见下文)都无法运行。我目前正在尝试显式使用Newtonsoft.JSON进行序列化和反序列化。我安装了Json库的版本7.0.2,它似乎取代了MS在VS2015中提供的版本6。我包括下面的所有代码。注意,通过Fiddler验证,服务器似乎工作正常。我确实注意到,当我开始使用Newtonsoft库时,它在所有“.”上添加了以前没有出现过的转义。但是结果是一样的——它错误

我有一个让我发疯的问题。我使用RestSharp成功地在WebAPI2上构建了两个rest服务和客户端。突然间,我连最简单的程序(见下文)都无法运行。我目前正在尝试显式使用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);
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
Net系统;
使用System.Net.Http;
使用System.Web.Http;
使用Newtonsoft.Json;
公共类my_数据
{
公共字符串sdata{get;set;}
公共整数idata{get;set;}
}
命名空间webapi2_server.Controllers
{
公共类TestController:ApicController
{
公共HttpResponseMessage获取(HttpRequestMessage请求)
{
HttpResponseMessage响应;
List myTestData=new List();
添加(新的my_数据(){sdata=“string1”,idata=1});
添加(新的my_数据(){sdata=“string2”,idata=2});
添加(新的my_数据(){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() );

        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用Newtonsoft.Json;
使用RestSharp;
公共类my_数据
{
公共字符串sdata{get;set;}
公共整数idata{get;set;}
}
命名空间控制台应用程序2
{
班级计划
{
静态void Main(字符串[]参数)
{
RestClient=newrestclient();
client.BaseUrl=新Uri(“Http://192.168.0.6");
var request=new RestRequest();
request.Resource=“测试/测试”;
request.Method=Method.GET;
request.RequestFormat=DataFormat.Json;
List my_data_response=new List();
IRestResponse response=client.Execute(请求);
my_data_response=JsonConvert.DeserializeObject(response.Content);
System.Console.WriteLine(“响应字符串:“+Response.Content”);
System.Console.WriteLine(“项目计数:+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]”。路径“”,第1行,位置205。-->System.ArgumentException:无法从System.String强制转换或转换为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)
---内部异常堆栈跟踪结束--在这里输入代码

我现在只使用MS stuff,而不使用Newtonsoft.Json。但是,我也遇到了一些问题,这也是我尝试使用JSOFT的原因。我看到了MS serialize h广告问题与列表

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


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

我现在只通过简单地不使用Newtonsoft.Json和只使用MS的东西来工作,这并没有进行转义。但是,我也有问题,which是我开始尝试使用JSOFT的原因。我看到评论说MS serialize与列表有问题

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

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