- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Json.NET 将 JSON 解析与 .NET 对象的构造分开。特别应该
JsonConvert.DeserializeObject<MyType>(jsonString)
和
一样JsonConvert.DeserializeObject<JToken>(jsonString).ToObject<MyType>()
ToObject
方法没有采用 SerializerSettings
的参数。那么如何指定 JSON 转换器和相关设置呢?
最佳答案
如果您已经将 JSON 解析为 JToken
层次结构,你可以使用 JToken.ToObject<T>(JsonSerializer)
使用转换器反序列化为所需的类型:
var settings = new JsonSerializerSettings
{
Converters = { new MyTypeConverter() },
// Other settings as required.
DateTimeZoneHandling = DateTimeZoneHandling.Utc,
};
var myType = jToken.ToObject<MyType>(JsonSerializer.CreateDefault(settings));
请注意 Json.NET 处理 DateTime
和字符串标记化期间的浮点识别,因此如果将 JSON 反序列化分为两个阶段,string
⇒ JToken
⇒ MyType
,那么日期字符串和小数可能会过早地被解析和识别。您可能需要在最初解析 JSON 和/或延迟日期识别时指定适当的设置,如下所示:
var parseSettings = new JsonSerializerSettings
{
DateParseHandling = DateParseHandling.None, // Defer date/time recognition until later.
FloatParseHandling = FloatParseHandling.Decimal, // Or Double if required.
};
var jToken = JsonConvert.DeserializeObject<JToken>(jsonString, parseSettings);
(相比之下,当在没有中间 JToken
表示的情况下直接从字符串反序列化为 POCO 时,序列化程序可以将“提示”传递给 JsonTextReader
分词器,以告知是否应将某些原始标记解释为日期、小数或者使用 ReadType
枚举。因此,枚举是 Newtonsoft 内部的。)
有关 DateTime
的更多信息解析见 Serializing Dates in JSON 。 sample fiddle here .
关于.net - 使用自定义 SerializerSettings 将 JToken 转换为 .NET 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54907568/
我有以下 Json { "error": { "errors": [ { "domain": "global", "reason": "requ
我有以下... JArray clients = (JArray)clientsParsed["objects"]; foreach (JObject item in clients.Children
JToken.ToObject() 之间有什么区别?方法和 JToken.Value()扩展方法(没有 key 参数的方法)? var jToken = JToken.Parse("123"); va
我有以下 JToken 输出。我如何从 TenantID 中检索此处的“值”,在这种情况下应为 1? {[ { "value": 1, "metadata": { "userType"
我有一个包含参数/值对的 JObject(例如“param1”:“aValue”)。我想根据数据网格中捕获的数据更新这些值。 然后根据定义以下类型的 JSON 架构验证参数值:“字符串”、“整数”和“
假设我有以下 JToken: @"{ ""data"": [ { ""company"": { ""ID"": ""12
我有一个值为 {1234} 的 JToken 如何将其转换为整数值,如 var totalDatas = 1234; var tData = jObject["$totalDatas"]; int t
我有一个 JObject,我想为它设置一个强类型对象的属性。 JObject["ProductionVersion"] = new ProductionVersion(); 为此,需要将 Produc
我有一个 json JTokens 列表: List subjectresults = jObj[jp]["subjects"].Children().ToList(); 请注意,我的 jp 是 va
作为我的问题的后续行动: JSON.NET: Obtain JObject from JProperty Value ... 我阅读了链接并消化了上述评论和建议。现在我想知道:为什么没有“直接”(即简
这是我的情况: 我有一个解析为 JObject 的 JSON 字符串。 JObject jObject = JObject.Parse(json); 我跳转到 JSON 中的“白名单”标记 JToke
这是我的情况: 我有一个解析为 JObject 的 JSON 字符串。 JObject jObject = JObject.Parse(json); 我跳转到 JSON 中的“白名单”标记 JToke
我正在尝试动态查找结构事先未知的 JSON 对象的叶节点名称。首先,我将字符串解析为 JTokens 列表,如下所示: string req = @"{'creationRequest
我有以下JToken: { "ID": "9dbefe3f5424d972e040007f010038f2" } 但每当我在 JToken 对象上运行 ToString() 以获取字符串形式的
在收到来自 API 的响应后,我有以下信息: JObject goatHerd = JObject.Parse(responseString); JToken goat = goatHerd["val
如何将这两个 JToken 合并为一个 JToken。这听起来应该很简单,但我无法绕过它。 { "data":[ { "ID":"53a1862000404a304942546b3
我想比较两个相同类型和结构的任意 JTokens(NewtonSoft 的 Json.Net)。 static int CompareTokens(JToken x, JToken y); // p
我从返回 JSON 响应的 Web 服务获取数据。这是我的代码: WebClient client = new WebClient(); var result = client.DownloadSt
我正在尝试更新 JToken 的值,但它的引用没有得到更新。 JSON 字符串: { "Title": "master", "Presentation": [ {
我想将 JToken 内容反序列化为一个对象(User)。我怎么能做到这一点? 这是我的 json 字符串: string json = @"[{""UserId"":0,""Username"":"
我是一名优秀的程序员,十分优秀!