Coa*_*ave 3 asp.net datacontract json.net asp.net-web-api
我只构建一个JSON WepApi,我有一个返回列表的控制器.我用Datacontract/Datamember属性装饰了列表,如下所示:
[DataContract(Name = "Files", Namespace = "http://schemas.example.com")]
public class FileDesc
{
[DataMember(Name = "MyFileName")]
public string Name { get; set; }
[DataMember(Name = "MyFilePath")]
public string Path { get; set; }
[DataMember(Name = "MyFileSize")]
public long? Size { get; set; }
public FileDesc(string n, string p, long? s)
{
Name = n;
Path = p;
Size = s;
}
}
Run Code Online (Sandbox Code Playgroud)
在我的控制器中,我返回如下列表:
// Response
List<FileDesc> FileList = new List<FileDesc>();
foreach (MultipartFileData file in provider.FileData)
{
FileList.Add(new FileDesc(file.Headers.ContentDisposition.FileName, file.LocalFileName , file.Headers.ContentDisposition.Size ));
}
return FileList;
Run Code Online (Sandbox Code Playgroud)
但是在JSON输出中,缺少列表的Name属性:
[
{
"myFileName": "\"ArduinoUNO.png\"",
"myFilePath": "c:\\images\\ArduinoUNO.png",
"myFileSize": null
}
]
Run Code Online (Sandbox Code Playgroud)
要强制仅JSON输出,我已删除Global.asax上的xml格式化程序:
//Only JSON
var formatters = GlobalConfiguration.Configuration.Formatters;
formatters.Remove(formatters.XmlFormatter);
Run Code Online (Sandbox Code Playgroud)
提前致谢
数组在JSON中没有自己的名称.如果要在列表中使用名称,则需要一个具有命名属性的外部对象来保存列表.
像这样的东西:
public class Response
{
[DataMember(Name = "Files")]
List<FileDesc> FileList { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后JSON看起来像这样:
{
"Files":
[
{
"myFileName": "\"ArduinoUNO.png\"",
"myFilePath": "c:\\images\\ArduinoUNO.png",
"myFileSize": null
}
]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1489 次 |
| 最近记录: |