我需要将一些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"
}
}
}
答案 0 :(得分:6)
这是.NET Core内置JSON库。
我找到了另一种方法。.以防万一,有人仍在寻找一种更清洁的方法。假设存在一个Movie
类
using System.Text.Json;
。 。
var movies = await JsonSerializer.DeserializeAsync
<IEnumerable<Movie>>(responseStream,
new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
});
答案 1 :(得分:2)
您需要添加一个额外的类:
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的建议。
答案 2 :(得分:1)
只需添加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建议