2017-06-07 65 views
1

我在我的ASP.NET應用程序中對我的appsettings.json文件進行加密/解密。使用ASP.NET Core反序列化appsettings.json

解密後,我的文件被正確解密到以下字符串:

{ 
    "ConnectionStrings": { 
    "IdentityServer4": "server=(localdb)\\mssqllocaldb;database=IdentityServer4.Quickstart.EntityFramework;trusted_connection=yes" 
    } 
} 

我現在想的是結果轉換爲一個對象,我嘗試使用下面的行不的代碼:

dynamic result = JsonConvert.DeserializeObject(jsonString); 

當該行執行,收到以下錯誤:

"Unexpected character encountered while parsing value: . Path '', line 0, position 0." 
+0

你記錄了jsonString變量來驗證它是否包含有效的JSON嗎? –

+1

可能在字符串的開頭有一個[BOM](https://en.wikipedia.org/wiki/Byte_order_mark)。如果是這樣,請參閱[此處](https://stackoverflow.com/q/1317700/3744182)中有關如何解決的建議。 – dbc

+1

@dbc,你是絕對正確的。做一個'jsonString = jsonString.Trim(new char [] {'\ uFEFF','\ u200B'});'解決了這個問題。請提交答案,以便我可以接受。 – blgrnboy

回答

0

似乎在字符串的開頭有一個Byte Order Mark

要剝離BOM,請參閱this question的答案。

但是,最好不要將它包含在字符串中。如果你有一個字節數組,其中包括一個BOM,做:

var jsonString = Encoding.UTF8.GetString(byteArray); 

那麼BOM將包括在內。但是,如果你有一個StreamReader讀取二進制數據,則BOM將被處理並刪除:

var jsonString = new StreamReader(new MemoryStream(byteArray)).ReadToEnd(); 

(你可以添加using聲明,表示如果你喜歡,儘管MemoryStream實際上並不需要進行配置。)

或者流,解密和沿this answer(用於XML)和this one線(同時進行減壓和JSON的反序列化)一次全部反序列化。