2017-06-07 27 views
1

ASP.NETアプリケーション内で私のappsettings.jsonファイルを暗号化/復号化しています。ASP.NETコアで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

有効なJSONが含まれていることを確認するためにjsonString変数をログに記録しましたか? –

+1

おそらく文字列の先頭に[BOM](https://en.wikipedia.org/wiki/Byte_order_mark)があります。その場合は、解決方法に関する提案については[here](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(); 

MemoryStreamが実際に配置する必要はありませんが、あなたは、あなたが好む場合はそれにusing文を追加することもできます。)

this answer(XMLの場合)とthis one(JSONの同時の圧縮解除と非直列化の場合)の行に沿って、ストリーム、復号化、逆シリアル化を同時に行います。

関連する問題