В Json.NET, как мне сделать ВСЕ свойства, необходимые при десериализации? Я знаю, что могу делать это с атрибутами сообщений, но я не хочу этого делать. В основном потому, что для моей библиотеки сообщений потребуется внешняя зависимость.
Я попробовал параметр MissingMemberHandling.Error, но он делает противоположное тому, что я хочу. Я уверен, что у JSON есть дополнительные свойства. Я хочу, чтобы он потерпел неудачу, когда в JSON отсутствуют какие-либо свойства целевого объекта.
Я фактически десериализую к записям F #, и свойства вообще не могут быть нулевыми. (Они не могут быть присвоены нуль нормальными средствами в коде.) Но Json.NET с радостью по умолчанию присваивает свойствам null под обложками, когда данные отсутствуют.
версия принятого ответа F #
Резольвер
open System
open Newtonsoft.Json
open Newtonsoft.Json.Serialization
type RequireAllPropertiesContractResolver() =
inherit DefaultContractResolver()
override me.CreateObjectContract(objectType:Type) =
let contract = base.CreateObjectContract(objectType)
contract.ItemRequired <- new Nullable<Required>(Required.Always)
contract
В настройках
let settings = new JsonSerializerSettings() // default settings
...
settings.ContractResolver <- new RequireAllPropertiesContractResolver()