Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从JSON创建动态对象,忽略空字段_C#_.net_Json_Dynamic - Fatal编程技术网

C# 从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 =

我需要使用一个输入参数为动态对象的方法,但我通过接收到的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不会总是填充对象中的所有可用字段,但我需要使用的方法不接受字段中的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));