codecutout/JsonApiSerializer

Deserialization in F# gives Could not create an instance of type... error

Opened this issue · 0 comments

Hi, I'm trying to deserialize in F# and I got Could not create an instance of type... error. I googled around and found no answer, so wonder if I can get some hints here. Thanks in advance!

#I @"C:\Users\he9li\.nuget\packages"
#r @"netstandard.library\2.0.3\build\netstandard2.0\ref\netstandard.dll"
#r @"newtonsoft.json\12.0.3\lib\netstandard2.0\Newtonsoft.Json.dll"
#r @"jsonapiserializer\1.7.4\lib\netstandard1.5\JsonApiSerializer.dll"

open Newtonsoft.Json
open Newtonsoft.Json.Serialization
open JsonApiSerializer

type Article =
  {
    Id : string
    Title : string
  }

let article = { Id = "1"; Title = "Hello"}
let jsonContent = JsonConvert.SerializeObject(article, JsonApiSerializerSettings())
// "{"data":{"id":"1","type":"article","attributes":{"title":"Hello"}}}"
JsonConvert.DeserializeObject<Article>(jsonContent, JsonApiSerializerSettings())
// Newtonsoft.Json.JsonSerializationException: Could not create an instance of type FSI_0052+Article.
//   at JsonApiSerializer.JsonConverters.ResourceObjectConverter.CreateObject(Type objectType, String jsonapiType, JsonSerializer serializer)
//   at JsonApiSerializer.JsonConverters.ResourceObjectConverter.ReadJson(JsonReader reader, Type objectType, Object existingValue, JsonSerializer serializer)
//   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.DeserializeConvertable(JsonConverter converter, JsonReader reader, Type objectType, Object existingValue)
//   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)    
//   at Newtonsoft.Json.Serialization.JsonSerializerProxy.DeserializeInternal(JsonReader reader, Type objectType)
//   at JsonApiSerializer.JsonConverters.DocumentRootConverter.ReadJson(JsonReader reader, Type objectType, Object existingValue, JsonSerializer serializer)
//   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.DeserializeConvertable(JsonConverter converter, JsonReader reader, Type objectType, Object existingValue)
//   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)    
//   at Newtonsoft.Json.Serialization.JsonSerializerProxy.DeserializeInternal(JsonReader reader, Type objectType)
//   at Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader, Type objectType)
//   at JsonApiSerializer.JsonConverters.DocumentRootConverter.ResolveAsRootData(JsonReader reader, Type objectType, JsonSerializer serializer)       
//   at JsonApiSerializer.JsonConverters.ResourceObjectConverter.ReadJson(JsonReader reader, Type objectType, Object existingValue, JsonSerializer serializer)
//   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.DeserializeConvertable(JsonConverter converter, JsonReader reader, Type objectType, Object existingValue)
//   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)    
//   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
//   at Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader, Type objectType)
//   at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
//   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
//   at <StartupCode$FSI_0055>.$FSI_0055.main@()
// Stopped due to error