【问题标题】:Accessing a POSTed JSON File in Web API在 Web API 中访问 POST 的 JSON 文件
【发布时间】:2017-08-01 20:28:01
【问题描述】:

我创建了一个接受 POST 的 JSON 文件的 Web API 服务。通过该服务,我想使用 JSON.NET 解析 JSON 文件。我已经看到有关该主题的多个帖子,但是,我不想将文件保存到磁盘。我想将文件保存在内存中,解析文件并在内存中处理文件。

我也在使用 .NET Framework 4.0。

编辑:我应该更清楚。当文件被 POST 时,它是一个文件流。我不知道的部分是如何将流转换为 JSON。

public HttpResponseMessage Post()
    {
        HttpResponseMessage result = null;
        int FileLen;
        var httpRequest = HttpContext.Current.Request;
        if (httpRequest.Files.Count > 0)
        {

            string MyString = string.Empty;
                var postedFile = httpRequest.Files[0];
            FileLen = postedFile.ContentLength;
            byte[] input = new byte[FileLen];
            System.IO.Stream testStream = postedFile.InputStream;
            testStream.Read(input, 0, FileLen);

            for (int Loop1 = 0; Loop1 < FileLen; Loop1++)
               MyString = MyString + input[Loop1].ToString();

            CurrentRate.JSONSerializer(MyString);

}

【问题讨论】:

  • 尝试使用JsonTextReader。它需要一个StringReader,它可以让您将内容保存在内存中(将此作为答案并认为这是一个错误的答案,因为我没有时间提供示例:()
  • @BobbyD 请检查我的编辑。

标签: c# json file asp.net-web-api


【解决方案1】:

由于 JSON.NET 能够使用以下代码反序列化文件(转换为流):

using (StreamReader file = File.OpenText(@"<pathToFile>"))
{
    JsonSerializer serializer = new JsonSerializer();
    MyObject myObject = (MyObject)serializer.Deserialize(file, typeof(MyObject));
}

通过使用类似于以下内容的方式从File.OpenText 换出流

using (var stream = new MemoryStream(<FileByteArrayFromMemory>);
using (StreamReader file = new StreamReader(stream))
{
    JsonSerializer serializer = new JsonSerializer();
    MyObject myObject = (MyObject)serializer.Deserialize(file, typeof(MyObject));
}

我们永远不必处理实际的文件。可能有一种更有效的方法来创建MemoryStream,或者您可能已经有Stream 并且可以初始化并且可以跳过该步骤。

编辑 2:更明确地显示了交换 StreamReader

【讨论】:

  • 请查看我的编辑。我没有打开文件。相反,控制器接受文件并将其转换为文件流。
  • @user1647160 我添加了代码来换出流,而不是解释你可以用不同的流替换File.OpenText
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-20
  • 1970-01-01
  • 1970-01-01
  • 2014-04-23
  • 1970-01-01
  • 1970-01-01
  • 2021-04-11
相关资源
最近更新 更多