Тип контракта данных 'Microsoft.FSharp.Core.FSharpOption`1[[MyWeb.Controllers.Header, MyWeb.Controllers, версия = 0.0.0.0, культура = нейтральный, PublicKeyToken = null]] 'не может быть десериализовано, поскольку не найдено требуемое значение элемента данных' *.1007 * Я сериализую / десериализую запись Message
:
[<DataContract>]
type Header =
{ [<DataMember>] mutable ID : int
[<DataMember>] mutable Description : string }
[<DataContract>]
type Message =
{ [<DataMember>] mutable ID : int
[<DataMember>] mutable Header : Header option
[<DataMember>] mutable SenderID : string
[<DataMember>] mutable ReceiverID : string }
Код, который я использую для десериализации JSON:
let deserializeJson<'a> (s:string) =
use ms = new MemoryStream(ASCIIEncoding.ASCII.GetBytes s)
let serialize = DataContractJsonSerializer(typeof<'a>)
serialize.ReadObject ms :?> 'a
И фактический необработанный результат JSON:
"Message":
{
"ID":13,
"Header": { "Value":{"ID":21,"Description":"some"}},
"SenderID":"312345332423",
"ReceiverID":"16564543423"
}
Вопрос: как десериализовать 'a option
?
Обновление
ASP.NET MVC использует JavaScriptSerializer
по умолчанию для сериализацииобъекты и я использую DataContractJsonSerializer
для десериализации.
По какой-то причине DataContractJsonSerializer
не может прочитать строку JSON, если только свойство Value
для опции не указано в нижнем регистре (как указано @svick).Грязное исправление - заменить «Значение» на «значение» в возвращаемой строке JSON, но я решил пойти по совету Робертса.