Ich habe ein seltsames Problem mit Azure-Funktions-Apps. Die Deserialisierung von Newtonsoft Json.NET gefällt den $type
Annotationen nicht. Mein Deserialisierung Code wie folgt aussieht:Serialisierung in Azure-Funktion
return JsonConvert.DeserializeObject<T>(json, new JsonSerializerSettings {
TypeNameHandling = TypeNameHandling.Auto
});
Die json wie folgt aussieht:
{
"$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",
...
Und serialisiert mit:
return JsonConvert.SerializeObject(o, new JsonSerializerSettings {
TypeNameHandling = TypeNameHandling.All,
Formatting = Formatting.Indented
});
Der Fehler ist:
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.
Wie Sie kann sehen, die Typen scheinen identisch zu sein l. Dieser Code ist lokal gut getestet und funktioniert wie erwartet. Es wird in Azure auf der ersten $type
Annotation fehlschlagen, unabhängig davon, wie viele ich entferne.
Ich möchte weiterhin die Anmerkungen verwenden, da ich sie für das Deserialisieren von Objekten benötigen, die von einer abstrakten Klasse abgeleitet sind.
Dies ist in x64, .NET 4.7, Json.NET v10.0.3, Azure Function Apps v1.0.11027.0 (~ 1) kompiliert. Ich habe die Newtonsoft.Json.dll-Datei im Ordner bin, mit #r "Newtonsoft.Json.dll"
, um es zu verweisen. Irgendwelche Ideen? Sehr geschätzt.
Edit: Ich habe auch eine project.json Datei suchen, wie versucht, indem:
{
"frameworks": {
"net47":{
"dependencies": {
"Newtonsoft.Json": "10.0.3"
}
}
}
}
, die erfolgreich installiert. Ich habe die hochgeladene Assembly-Datei und den Import #r
entfernt. Der Fehler ist nun:
2017-08-01T18:30:18.971 Error resolving type specified in JSON 'Trading.Control.Json.TradingConfig, Trading'. Path '$type', line 2, position 56.
Ich vermute, es ist ein „Basis-Namensraum“, etc. zu jagen Lookup-Fehler.
Das Dateisystem der Funktion sieht folgendermaßen aus: /site/wwwroot/TimerTriggerCSharp3/
mit Assemblys in einem bin-Ordner. Sie sind alle mit #r
Importe geladen, die gut funktionieren.
Sie höchstwahrscheinlich zwei Kopien der DLL geladen funktioniert. Bitte schauen Sie sich den App Service Editor an und fügen Sie von dort eine Beschreibung der Funktion app Dateisystem Struktur hinzu. Machst du gerade eine Montage? – Jeff
Verwenden Sie auch csx oder eine vorkompilierte Funktion dll? – Jeff
@Jeff Ich benutze csx. Ich hatte meine eigenen Assemblys geladen, aber die Datei und den Import nach dem Hinzufügen der Datei project.json entfernt. Ich erhalte jetzt einen anderen Fehler (oben aktualisiert). – Osan