У меня есть один простой вопрос: возможно ли разобрать F # Тип карты от json? Потому что, когда я пытаюсь это сделать (с F# Map<string, string>
), его легко сериализовать, и он выглядит так, как он должен, но когда я пытаюсь десериализовать, он бросает исключение.Deserializing F # Карта от Json.Net
Newtonsoft.Json.JsonSerializationException: Unable to find a default constructor to use for type Microsoft.FSharp.Collections.FSharpMap`2[System.Int32,System.String]. Path '1', line 2, position 7.
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateNewDictionary (Newtonsoft.Json.JsonReader reader, Newtonsoft.Json.Serialization.JsonDictionaryContract contract, System.Boolean& createdFromNonDefaultConstructor) [0x00000] in <filename unknown>:0
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject (Newtonsoft.Json.JsonReader reader, System.Type objectType, Newtonsoft.Json.Serialization.JsonContract contract, Newtonsoft.Json.Serialization.JsonProperty member, Newtonsoft.Json.Serialization.JsonContainerContract containerContract, Newtonsoft.Json.Serialization.JsonProperty containerMember, System.Object existingValue) [0x00000] in <filename unknown>:0
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal (Newtonsoft.Json.JsonReader reader, System.Type objectType, Newtonsoft.Json.Serialization.JsonContract contract, Newtonsoft.Json.Serialization.JsonProperty member, Newtonsoft.Json.Serialization.JsonContainerContract containerContract, Newtonsoft.Json.Serialization.JsonProperty containerMember, System.Object existingValue) [0x00000] in <filename unknown>:0
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize (Newtonsoft.Json.JsonReader reader, System.Type objectType, Boolean checkAdditionalContent) [0x00000] in <filename unknown>:0
И это десериализация от классики:
Map.ofList [ ("1", "one"); ("2", "two"); ("3", "three") ]
В результате JSON выглядит как C# словарь
{
"1": "one",
"2": "two",
"3": "three"
}
Он сериализация без настроек (только отступ). Так можно ли сериализовать это, или есть какой-то рабочий обход?
Спасибо за ответ
Я предполагаю, что существует значительная проблема, поскольку карта F # неизменна. –
https://gist.github.com/mausch/10022178 –