2017-08-01 74 views
-1

我創建了接受POST JSON文件的Web API服務。使用該服務,我想使用JSON.NET解析JSON文件。我已經看到有關該主題的多篇文章,但是,我不想將該文件保存到磁盤。我想將文件保存在內存中,解析文件並將文件處理到內存中。在Web API中訪問POST JSON文件

我也在使用.NET Framework 4.0。

編輯:我應該更清楚。當文件被張貼時,它是一個文件流。我不知道的部分是如何將流轉換爲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); 

}

+0

嘗試使用[JsonTextReader](http://www.newtonsoft.com/json/help/html/ReadJsonWithJsonTextReader.htm)。它需要一個[StringReader](https://msdn.microsoft.com/en-us/library/system.io.stringreader.aspx),它可以讓你保留內存中的內容(這是一個答案,並決定它是一個不好的答案,因爲我沒有時間提供一個例子:() –

+0

@BobbyD請檢查我的編輯 – user1647160

回答

-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

+0

請檢查我的編輯我沒有打開一個文件,而是控制器接受該文件並將其轉換爲一個文件流 – user1647160

+0

@ user1647160我添加了代碼來替換流而不是解釋你可以用不同的流代替'File.OpenText' – WindRaven