ein Wörterbuch zu json von Newtonsoft.json und brüllen Code serialisiert:Newtonsoft.Json, Populate Wörterbuch fehlgeschlagen
var serializeSettings = new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.All,
TypeNameAssemblyFormat = FormatterAssemblyStyle.Full,
Formatting = Formatting.Indented
};
var serializedObject = JsonConvert.SerializeObject(dic, serializeSettings);
diesem Code erzeugen ein Json wie folgt aus:
{
"$type": "System.Collections.Generic.Dictionary`2[[System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"9648af76-7986-4b34-8b2c-97b2345769ef": "Test"
}
Ich versuche zu deserialisieren json von diesem Code-Wörterbuch:
var newDic = new Dictionay<Guid,string>();
var deserializeSettings = new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.All,
TypeNameAssemblyFormat = FormatterAssemblyStyle.Full,
Formatting = Formatting.Indented
}
JsonConvert.PopulateObject(serializedObject, newDic, deserializeSettings);
Aber diese Ausnahme auftritt:
Die Zeichenfolge '$ type' konnte nicht in den Dictionary-Schlüsseltyp 'System.Guid' konvertiert werden. Erstellen Sie einen TypeConverter, um von der Zeichenfolge in das Schlüsseltypobjekt zu konvertieren. Pfad '$ Typ', Zeile 2, Position 10.
bei Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateDictionary (IDictionary Wörterbuch, JsonReader Leser, JsonDictionaryContract Vertrag, JsonProperty containerProperty, String id)
bei Newtonsoft.Json .Serialization.JsonSerializerInternalReader.Populate (JsonReader reader, Zielobjekt)
bei Newtonsoft.Json.JsonSerializer.PopulateInternal (JsonReader reader, Zielobjekt)
bei Newtonsoft.Json.JsonSerializer.Populate (JsonReader reader, Zielobjekt)
bei Newtonsoft.Json.JsonConvert.PopulateObject (String Wert, Objekt Ziel, JsonSerializerSettings Einstellungen)
Ich schreibe GuidConverter wie diese und verwenden. aber nicht funktionieren
public class GuidConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType.IsAssignableFrom(typeof(Guid));
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
try
{
return serializer.Deserialize<Guid>(reader);
}
catch
{
return Guid.Empty;
}
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
serializer.Serialize(writer, value);
}
}
EDIT:
Ich fand mein Problem. Code ändern deserialisieren json zu Wörterbuch < string, string> und jetzt Erster Eintrag in generierten Wörterbuch ist:
Kay: "$type"
Value : "System.Collections.Generic.Dictionary`2[[System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
Warum ??
Brauchen Sie die spezielle Einstellung und die Guid? Vielleicht versuchen Sie etwas einfacheres wie 'JsonConvert.SerializeObject (dic);' und sehen, ob das gibt Ihnen, was Sie brauchen. – senschen
@ssenschen Ich verwende eine generische Klasse, um mehrere Typen in meinem Projekt zu serialisieren und zu deserialisieren. Andere Typen in meinem Projekt müssen diese Einstellungen verwenden. Bitte lesen Sie die letzte Änderung meiner Frage – Fred
Verwenden Sie Zeichenfolge anstelle von Guid @Fred –