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[]