C# webapi序列化期间权限不足的解决方法
我有一个webapi,它输出的结果如下:C# webapi序列化期间权限不足的解决方法,c#,.net,asp.net-web-api,C#,.net,Asp.net Web Api,我有一个webapi,它输出的结果如下: [ { "Households": 3, "Municipality": "WC001", "Tenure status": "Owned and fully paid off", "Income category": "R 2 457 601 or more", "Computer": "No" }, ... 前两个项目(住户和市政)始终存在,随后的项目-可能有任意数量,至少一个 我可以使用服务器上的列表对
[
{
"Households": 3,
"Municipality": "WC001",
"Tenure status": "Owned and fully paid off",
"Income category": "R 2 457 601 or more",
"Computer": "No"
},
...
前两个项目(住户和市政)始终存在,随后的项目-可能有任意数量,至少一个
我可以使用服务器上的列表对象来生成它。但是,当我上传到共享托管环境时,我得到了错误:
“ObjectContent”类型未能序列化内容类型“application/json”的响应正文;字符集=utf-8'。innerException请求“System.Security.Permissions.ReflectionPermission,mscorlib,Version=4.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”类型的权限失败
我无法将web.config中的trustlevel更改为full,因为宿主公司已将其锁定
我认为这是因为动态对象需要反射来检查属性名,其他返回POCO的webapi调用可以正常工作
所以我试着把它从一个列表对象改成一个列表,但是我仍然得到同样的错误
是否有一种方法可以在不需要反射序列化的情况下创建这个“动态”对象 这是我刚刚发现的一个潜在解决方案:在Json字符串上构建结果,并将方法更改为HttpResponseMessage,然后直接返回字符串,避免使用Json.NET序列化程序,如下所示:
var sb = new StringBuilder();
...
var response = Request.CreateResponse(HttpStatusCode.OK);
response.Content = new StringContent(sb.ToString(), Encoding.UTF8, "application/json");
return response;
与StringBuilder相比,我更喜欢使用对象/类,但这至少是可行的。其他API调用是否也将POCO序列化为Json?是的,它们确实可以-效果绝对不错。所以我想他们也在使用反射,但是这里有些不同,属性名是动态的?