[英]JSON.NET Case Insensitive Deserialization not working
我需要將一些 JSON 反序列化到我的對象中,其中 JSON 的大小寫未知/不一致。 JSON.NET 應該不區分大小寫,但它對我不起作用。
我的類定義:
public class MyRootNode
{
public string Action {get;set;}
public MyData Data {get;set;}
}
public class MyData
{
public string Name {get;set;}
}
我收到的 JSON 有小寫的Action
& Data
並且有正確的MyRootNode
。
我正在使用它來反序列化:
MyRootNode ResponseObject = JsonConvert.DeserializeObject<MyRootnode>(JsonString);
它返回一個初始化的MyRootNode
但Action
和Data
屬性為空。
有什么想法嗎?
編輯:添加了 JSON
{
"MyRootNode":{
"action":"PACT",
"myData":{
"name":"jimmy"
}
}
}
這是 .NET Core 內置 JSON 庫。
我找到了另一種方法。以防萬一,有人仍在尋找一種更清潔的方法。 假設存在一個Movie
類
using System.Text.Json;
. . .
var movies = await JsonSerializer.DeserializeAsync
<IEnumerable<Movie>>(responseStream,
new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
});
只需添加JsonProperty
屬性並設置 jsonProperty 名稱
public class MyRootNode
{
[JsonProperty(PropertyName = "action")]
public string Action {get;set;}
[JsonProperty(PropertyName = "myData")]
public MyData Data {get;set;}
}
public class MyData
{
[JsonProperty(PropertyName = "name")]
public string Name {get;set;}
}
UPD:是的,按照@mjwills 的建議添加一些基本類型
您需要添加一個額外的類:
public class MyRootNodeWrapper
{
public MyRootNode MyRootNode {get;set;}
}
然后使用:
MyRootNodeWrapperResponseObject = JsonConvert.DeserializeObject<MyRootNodeWrapper>(JsonString);
https://stackoverflow.com/a/45384366/34092可能值得一讀。 這基本上是相同的場景。
另外,更改:
public MyData Data {get;set;}
到:
public MyData MyData {get;set;}
根據@demo 和@Guy 的建議。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.