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)
它返回为已初始化MyRootNode但Action和Data属性为空。
有任何想法吗?
编辑:添加了 JSON
{
"MyRootNode":{
"action":"PACT",
"myData":{
"name":"jimmy"
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是 .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)
只需添加 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 的建议添加一些基本类型
您需要添加一个额外的类:
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 的建议。
| 归档时间: |
|
| 查看次数: |
13842 次 |
| 最近记录: |