C# 从JSON创建动态对象,忽略空字段
我需要使用一个输入参数为动态对象的方法,但我通过接收到的JSON来提供对象 动态生成器:C# 从JSON创建动态对象,忽略空字段,c#,.net,json,dynamic,C#,.net,Json,Dynamic,我需要使用一个输入参数为动态对象的方法,但我通过接收到的JSON来提供对象 动态生成器: public static dynamic PayChargeObject() { var body = new { payment = new { banking_billet = new { customer =
public static dynamic PayChargeObject()
{
var body = new
{
payment = new
{
banking_billet = new
{
customer = new
{
name = "",
email = "",
cpf = "",
birth = "",
phone_number = "",
address = new
{
street = "",
number = "",
neighborhood = "",
zipcode = "",
city = "",
complement = "",
state = "",
},
juridical_person = new
{
corporate_name = "",
cnpj = "",
}
},
expire_at = "",
discount = new
{
type = "",
value = 0
},
conditional_discount = new
{
type = "",
value = 0,
until_date = ""
},
message = ""
}
}
};
return body;
}
我的JSON数据:
{
"payment": {
"banking_billet": {
"customer": {
"name": "person name",
"email": "personnamez@gerencianet.com.br",
"cpf": "94271564656",
"birth": "1977-01-15",
"phone_number": "41991234567"
},
"expire_at": "2019-12-12"
}
}
请注意,json不会总是填充对象中的所有可用字段,但我需要使用的方法不接受字段中的null值,我的问题是,在动态对象中反序列化json时,json中未使用的字段在动态对象中创建为null
JSON转换和方法调用:
var obj = JsonConvert.DeserializeAnonymousType(MyJSON, PayChargeObject())
dynamicMethod.PayCharge(obj);
如何解决此问题?借助@dbc解决方案: 替换:
var obj = JsonConvert.DeserializeAnonymousType(MyJSON, PayChargeObject())
dynamicMethod.PayCharge(obj);
与:
您返回的不是动态对象,而是匿名类型的对象。如果要返回真正的动态对象(没有允许添加任意属性的固定模式的对象),可以反序列化到
ExpandoObject
。与真正的不同,匿名类型对象具有固定模式。这意味着JSON中缺少的属性必须存在于返回的对象中——具有一些默认值。如果您不想使用null
,您希望缺少的属性有什么值?传入的匿名类型对象中的值传入?@dbc您是对的,我通过替换块var obj=JsonConvert.DeserializeAnonymousType(MyJSON,PayChargeObject())dynamicMethod.PayCharge(obj)来管理;使用dynamicMethod.PayCharge(JObject.Parse(MyJSON));当然,JObject
有额外的特定于JSON的属性,因此您可能希望使用ExpandoObject
。但是如果JObject
有效,那就是一场胜利。要我回答吗?
dynamicMethod.PayCharge(JObject.Parse(MyJSON));