JSON.NET 不区分大小写的反序列化不起作用

Cat*_*lMF 5 .net c# json json.net deserialization

我需要将一些 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;}
}
Run Code Online (Sandbox Code Playgroud)

我收到的 JSON 有小写的Action&Data并且有正确的MyRootNode.

我正在使用它来反序列化:

MyRootNode ResponseObject = JsonConvert.DeserializeObject<MyRootnode>(JsonString);
Run Code Online (Sandbox Code Playgroud)

它返回为已初始化MyRootNodeActionData属性为空。

有任何想法吗?

编辑:添加了 JSON

{
   "MyRootNode":{
      "action":"PACT",
      "myData":{
         "name":"jimmy"
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

Zia*_*han 7

这是 .NET Core 内置 JSON 库。

我找到了另一种方法。以防万一,有人仍在寻找一种更清洁的方法。假设存在一个Movie

    using System.Text.Json;
Run Code Online (Sandbox Code Playgroud)

. . .

    var movies = await JsonSerializer.DeserializeAsync
        <IEnumerable<Movie>>(responseStream,
        new JsonSerializerOptions
        {
            PropertyNameCaseInsensitive = true
        });
Run Code Online (Sandbox Code Playgroud)

  • 启动选项对我不起作用:(,我使用的是 dot net 6。 (5认同)

dem*_*emo 5

只需添加 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;}
}
Run Code Online (Sandbox Code Playgroud)

UPD:是的,按照 @mjwills 的建议添加一些基本类型


mjw*_*lls 3

您需要添加一个额外的类:

public class MyRootNodeWrapper
{
    public MyRootNode MyRootNode {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

然后使用:

MyRootNodeWrapperResponseObject = JsonConvert.DeserializeObject<MyRootNodeWrapper>(JsonString);
Run Code Online (Sandbox Code Playgroud)

/sf/answers/3176905651/可能值得一读。基本上是相同的场景。

另外,更改:

public MyData Data {get;set;}
Run Code Online (Sandbox Code Playgroud)

到:

public MyData MyData {get;set;}
Run Code Online (Sandbox Code Playgroud)

根据@demo 和@Guy 的建议。