【发布时间】:2021-05-29 02:19:19
【问题描述】:
我有来自前端的动态嵌套 JSON。请参阅下面的内容,与仅发送值不为空的那些键一样动态。在这些情况下,中间的首字母没有被填写,所以你找不到它:
{
"name": {
"firstname": "fst",
"lastname": "lst"
},
"gender": "male",
"birthdate": "2021-02-09",
"maritalstatus": "Never married",
"id": {
"social": "123456789"
}
}
我已经为每个潜在的属性尝试了这些:
JsonElement lastname;
question1.TryGetProperty("lastname", out lastname);
但是想找个更体面的方式,比如下面这个:
var options = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true,
IgnoreNullValues = true
};
var jsonModel = JsonSerializer.Deserialize<Survey>(obj, options);
var modelJson = JsonSerializer.Serialize(jsonModel, options);
但问题是这种方式只能处理第一级属性,如性别、出生日期、婚姻状况,但对 firstname、lastname 和 social 无效。
如何解决它或我可以尝试的任何其他方法,非常感谢!
更新1:
Survey 是一个 poco,看起来像这样,但远不止这些属性,请参阅那些注释,我试图让自己做映射而不是我自己:
public class Survey
{
[JsonPropertyName("firstname")]
public string FirstName{get;set;}
[JsonPropertyName("middleinitial")]
public char MiddleInitial{get;set;}
[JsonPropertyName("lastname")]
public string LastName{get;set;}
[JsonPropertyName("jrsr")]
public string JrSr{get;set;}
[JsonPropertyName("gender")]
public char Gender{get;set;}
[JsonPropertyName("birthdate")]
public DateTime Birthdate{get;set;}
[JsonPropertyName("maritalstatus")]
public string MaritalStatus{get;set;}
[JsonPropertyName("Social")]
public string SocialSecurityNumber{get;set;}
public string MedicareNumber{get;set;}
public string MedicaidNumber{get;set;}
}
【问题讨论】:
-
Survey的声明是什么样的? -
@ConnorLow 谢谢,该解决方案有效,所以实际上是一个自定义的 json 转换器和加上反射,它在转换器内部采用注释“name.firstname”,它有 SelectToken 方法处理它.
标签: c# asp.net json asp.net-core