Azure Function Appsで奇妙な問題が発生しています。 Newtonsoft Json.NETの逆シリアル化では$type
注釈が好きではありません。 JSONがどのように見えるAzure関数でシリアライズ
return JsonConvert.DeserializeObject<T>(json, new JsonSerializerSettings {
TypeNameHandling = TypeNameHandling.Auto
});
:
{
"$type": "Trading.Control.Json.TradingConfig, Trading",
"Config": {
"$type": "Trading.Control.Json.Config, Trading",
"Optimize": false
},
"Trading": {
"$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[Trading.Platforms.Credentials, Trading]], mscorlib",
...
としてシリアル化され:
return JsonConvert.SerializeObject(o, new JsonSerializerSettings {
TypeNameHandling = TypeNameHandling.All,
Formatting = Formatting.Indented
});
エラーは次のとおりです。あなたのよう
2017-08-01T17:32:46.395 Type specified in JSON
'Trading.Control.Json.TradingConfig, Trading, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' is not compatible with
'Trading.Control.Json.TradingConfig, Trading, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. Path '$type', line 2, position 56.
のように私のデシリアライゼーションコードが見えます見ることができる、タイプはidenticaと思われるl。このコードはローカルで十分にテストされており、期待どおりに動作します。何度削除しても、最初の$type
アノテーションでAzureでエラーが発生します。
抽象クラスから派生したオブジェクトを逆シリアル化するために必要なので、私は注釈を使い続けたいと思います。
これはx64、.NET 4.7、Json.NET v10.0.3 Azure Function Apps v1.0.11027.0(〜1)でコンパイルされています。私はそれを参照するために#r "Newtonsoft.Json.dll"
と、binフォルダにNewtonsoft.Json.dllファイルがあります。何か案は?とても有難い。
編集:
正常にインストール{
"frameworks": {
"net47":{
"dependencies": {
"Newtonsoft.Json": "10.0.3"
}
}
}
}
: は、私はまた、のように見えるproject.jsonファイルを追加しようとしています。アップロードしたアセンブリファイルを削除し、#r
をインポートしました。エラーは次のようになりました。
2017-08-01T18:30:18.971 Error resolving type specified in JSON 'Trading.Control.Json.TradingConfig, Trading'. Path '$type', line 2, position 56.
「ベースネームスペース」または一部のルックアップエラーが疑われます。
このファイルシステムのファイルシステムは、/site/wwwroot/TimerTriggerCSharp3/
のようにbinフォルダ内にあります。それらはすべて、#r
の読み込みで読み込まれ、正常に動作します。
動作させるために、この部分を変更しなければなりませんでした。アプリサービスエディタをチェックして、そこから機能アプリファイルシステム構造の説明を追加してください。自分で組み立てているアセンブリをやっていますか? – Jeff
また、csxまたはプリコンパイルされた関数dllを使用していますか? – Jeff
@Jeff私はcsxを使用しています。自分のアセンブリを読み込んでいましたが、project.jsonファイルを追加した後でファイルとインポートを削除しました。私は今、別のエラー(上に更新)を取得しています。 – Osan