【问题标题】:Create dynamic object from a JSON disregarding null fields从 JSON 中创建动态对象,忽略空字段
【发布时间】:2020-01-16 05:02:57
【问题描述】:

我需要使用输入参数是动态对象的方法,但我通过接收到的 JSON 提供对象

动态生成器:

 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不会总是把对象中的所有可用字段都填满,但是我需要消费的方法不接受字段中的空值,而我的问题是这样的,在动态对象中反序列化JSON时,字段JSON 中未使用的在动态对象中创建为 null

JSON 转换和方法调用:

    var obj = JsonConvert.DeserializeAnonymousType(MyJSON, PayChargeObject())
    dynamicMethod.PayCharge(obj);

Dynamic Object with null fields on Debug

我该如何解决这个问题?

【问题讨论】:

  • 返回的不是动态对象,而是匿名类型对象。如果你想返回一个真正的动态对象(一个没有允许添加任意属性的固定模式的对象),你可以反序列化为ExpandoObject
  • 与真正的dynamic objects 不同,匿名类型对象具有固定模式。这意味着 JSON 中缺少的属性必须存在于返回的对象中——具有一些默认值。如果您不想使用null,您希望为缺少的属性设置什么值do?传入的匿名类型对象中的值是多少?
  • @dbc 你说得对,我通过替换块来管理 var obj = JsonConvert.DeserializeAnonymousType(MyJSON, PayChargeObject()) dynamicMethod.PayCharge(obj);使用 dynamicMethod.PayCharge(JObject.Parse(MyJSON));
  • 好吧,JObject 具有额外的 JSON 特定属性,因此您可能想改用 ExpandoObject。但如果JObject 有效,那就是胜利。要我回答吗?

标签: c# .net json dynamic


【解决方案1】:

借助@dbc 解决方案:

替换:

var obj = JsonConvert.DeserializeAnonymousType(MyJSON, PayChargeObject()) 
dynamicMethod.PayCharge(obj);

与:

dynamicMethod.PayCharge(JObject.Parse(MyJSON));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    • 2016-10-02
    • 1970-01-01
    • 2022-01-03
    • 2019-10-21
    • 2019-03-21
    • 2020-09-28
    相关资源
    最近更新 更多