LINQ/MVC webservice return json 文件或空数组
LINQ/MVC webservice return json file or an empty array
我真的不知道如何表达这个但我想要实现的是以下内容,从存储中读取一个 JSON 文件(直接 url)但是如果 JSON 文件不存在它应该 return 一个空数组。
这是我目前所得到的(并且有效)
public object GetFromFile(int Code)
{
string uriPath = "http://mystorage.com/folder/" + Code + ".json";
var allText = (new WebClient()).DownloadString(uriPath);
object jsonObject = JsonConvert.DeserializeObject(allText);
return jsonObject;
}
它 return 对我来说,请求的代码列表是一个数组,现在如果存储中不存在代码,可能的话,web 服务应该只是 return 和空数组 [ ]
期望的结果:
来自文件(作品):
[{001},{002},{003}]
如果文件不存在
[]
//The call to WebClient.DownloadString(string) will throw an exception if the
//uri does not exist, in your case, the json file does not exist
var allText = null;
object jsonObject = null;
try
{
allText = (new WebClient()).DownloadString(uriPath);
jsonObject = JsonConvert.DeserializeObject(allText);
}
catch(WebException ex)
{
jsonObject = new object[0];
}
您似乎希望 JSON 文件包含一系列相似的项目,从外观上看是一个整数序列。
如果您已经知道 JSON 文件包含此类对象,最好使用 DeserializeObject<int>
.
的重载
IEnumerable<int> ReadNumbersFromWebClient(int Code)
{
string uriPath = "http://mystorage.com/folder/" + Code + ".json";
var downloadedText = DownloadText(uriPath);
return JsonConvert.DeserializeObject<int[]>(allText);
}
string DownloadText(string uriPath)
{
using (var webClient = new WebClient())
{
return webClient.DownloadString(uriPath);
}
}
你说如果“文件不存在”你想return一个空序列。我假设您的意思是:“如果 Web 客户端说没有要下载的字符串”
我查看了 WebClient.DownloadString,但我找不到如果您使用不存在的 uriPath 会发生什么。您得到的是空字符串还是异常?
ICollection<int> ReadNumbersFromWebClient(int Code)
{
// in case of exception: return empty string
try
{
string uriPath = "http://mystorage.com/folder/" + Code + ".json";
var downloadedText = DownloadText(uriPath);
return JsonConvert.DeserializeObject<int[]>(allText);
}
catch (Exception exc) // or use specific exception
{
return new int[];
}
}
如果让 DownloadText 捕获表达式会更整洁。如果出现异常 return 空字符串。尝试反序列化空字符串时会发生什么情况。它可能是一个空 int[]
我真的不知道如何表达这个但我想要实现的是以下内容,从存储中读取一个 JSON 文件(直接 url)但是如果 JSON 文件不存在它应该 return 一个空数组。
这是我目前所得到的(并且有效)
public object GetFromFile(int Code)
{
string uriPath = "http://mystorage.com/folder/" + Code + ".json";
var allText = (new WebClient()).DownloadString(uriPath);
object jsonObject = JsonConvert.DeserializeObject(allText);
return jsonObject;
}
它 return 对我来说,请求的代码列表是一个数组,现在如果存储中不存在代码,可能的话,web 服务应该只是 return 和空数组 [ ]
期望的结果:
来自文件(作品):
[{001},{002},{003}]
如果文件不存在
[]
//The call to WebClient.DownloadString(string) will throw an exception if the
//uri does not exist, in your case, the json file does not exist
var allText = null;
object jsonObject = null;
try
{
allText = (new WebClient()).DownloadString(uriPath);
jsonObject = JsonConvert.DeserializeObject(allText);
}
catch(WebException ex)
{
jsonObject = new object[0];
}
您似乎希望 JSON 文件包含一系列相似的项目,从外观上看是一个整数序列。
如果您已经知道 JSON 文件包含此类对象,最好使用 DeserializeObject<int>
.
IEnumerable<int> ReadNumbersFromWebClient(int Code)
{
string uriPath = "http://mystorage.com/folder/" + Code + ".json";
var downloadedText = DownloadText(uriPath);
return JsonConvert.DeserializeObject<int[]>(allText);
}
string DownloadText(string uriPath)
{
using (var webClient = new WebClient())
{
return webClient.DownloadString(uriPath);
}
}
你说如果“文件不存在”你想return一个空序列。我假设您的意思是:“如果 Web 客户端说没有要下载的字符串”
我查看了 WebClient.DownloadString,但我找不到如果您使用不存在的 uriPath 会发生什么。您得到的是空字符串还是异常?
ICollection<int> ReadNumbersFromWebClient(int Code)
{
// in case of exception: return empty string
try
{
string uriPath = "http://mystorage.com/folder/" + Code + ".json";
var downloadedText = DownloadText(uriPath);
return JsonConvert.DeserializeObject<int[]>(allText);
}
catch (Exception exc) // or use specific exception
{
return new int[];
}
}
如果让 DownloadText 捕获表达式会更整洁。如果出现异常 return 空字符串。尝试反序列化空字符串时会发生什么情况。它可能是一个空 int[]