簡體   English   中英

JSON.NET 不區分大小寫的反序列化不起作用

[英]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);

它返回一個初始化的MyRootNodeActionData屬性為空。

有什么想法嗎?

編輯:添加了 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM