Sco*_*y H 12 c# asp.net schema routes asp.net-web-api
目前,我们正在使用这样的路线:
[HttpPost]
[Route("upload")]
public async Task<dynamic> Upload(dynamic uploadedData)
{
JArray files = uploadedData.pdfs;
// ...
}
Run Code Online (Sandbox Code Playgroud)
而不是使用dynamic,我想对进入的数据有一个示意图.所以我可以使用这样的设置,使用定义模式的类:
public class UploadRequest : JObject
{
public JArray pdfs { get; set; }
}
[HttpPost]
[Route("upload")]
public async Task<dynamic> Upload(UploadRequest uploadedData)
{
// Now can access the JArray via uploadedData.pdfs directly
// ...
}
Run Code Online (Sandbox Code Playgroud)
这是解决这种情况的正确方法吗?或者是否有另一种通过ASP .NET WebAPI接收JSON数据的标准最佳实践?
具体而言,这种方法目前不起作用.虽然我的小模式类扩展了JObject,但是我得到了一个错误
参数字典包含参数'uploadedData'的无效条目,用于方法'System.Threading.Tasks.Task`1 [System.Object] Upload(UploadRequest)'in'EditPdfServer.Controllers.PdfFileController'.该字典包含类型为"Newtonsoft.Json.Linq.JObject"的值,但该参数需要类型为"EditPdfServer.Controllers.PdfFileController + UploadRequest"的值.
首先,这看起来像是一种正确的方法吗?其次,有更好的吗?第三,为什么这种方法不起作用?提前致谢.
你正在走上正轨.
您不需要过分关注Newtonsoft.Json的内部实现.特别是,您应该尽量避免使用JObject/JToken /其他J类型,并且您绝对不需要子类JObject.
您的请求对象类可以简单地是:
public class UploadRequest
{
[JSONProperty("pdfs")]
public SomePDFClass PDFs[] { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这将映射到以下请求:
{
"pdfs": [
{ <some PDF object here> },
{ <some PDF object here> },
{ <some PDF object here> }
]
}
Run Code Online (Sandbox Code Playgroud)
string参数JSONPropertyAttribute定义了JSON文档中显示的属性名称,因此您不需要在代码中使用与JSON中相同的名称.您可以在代码中更改名称,只要该属性仍使用与文档相同的名称即可.
我建议你使用JSON属性属性pdfs属性:
public class UploadRequest : JObject
{
[JSONProperty("<name of the property in the JSON object>")]
public JArray pdfs { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
另请查看这篇文章,了解有关该属性的更多信息:JSON.NET反序列化/序列化JsonProperty JsonObject
| 归档时间: |
|
| 查看次数: |
608 次 |
| 最近记录: |