首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何从Jil.JSON.DeserializeDynamic创建的动态对象中获取非公共成员?

从Jil.JSON.DeserializeDynamic创建的动态对象中获取非公共成员可以使用反射来实现。动态对象是一个ExpandoObject类型的实例,它允许动态添加和获取成员。

以下是一个示例代码,演示如何从动态对象中获取非公共成员:

代码语言:txt
复制
using System;
using System.Dynamic;
using System.Reflection;

// 假设我们有一个从JSON反序列化而来的动态对象
dynamic dynamicObj = Jil.JSON.DeserializeDynamic(jsonString);

// 获取动态对象的类型
Type dynamicType = dynamicObj.GetType();

// 获取动态对象的所有成员
MemberInfo[] members = dynamicType.GetMembers(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);

// 遍历成员,查找非公共成员
foreach (MemberInfo member in members)
{
    // 判断成员是否为字段或属性,并且非公共成员
    if ((member.MemberType == MemberTypes.Field || member.MemberType == MemberTypes.Property) && !member.IsPublic)
    {
        // 获取成员的值
        object value = null;
        if (member.MemberType == MemberTypes.Field)
        {
            value = dynamicType.GetField(member.Name, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).GetValue(dynamicObj);
        }
        else if (member.MemberType == MemberTypes.Property)
        {
            value = dynamicType.GetProperty(member.Name, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).GetValue(dynamicObj);
        }

        // 处理成员的值
        Console.WriteLine($"非公共成员 {member.Name} 的值为 {value}");
    }
}

上述代码首先获取了动态对象的类型,然后通过反射获取该类型的所有成员。接着,使用条件判断筛选出非公共成员,并通过反射获取这些非公共成员的值。

需要注意的是,动态对象的成员可以是字段或属性,因此我们需要分别使用GetField和GetProperty方法来获取成员的值。最后,根据具体需求对非公共成员的值进行处理。

希望这个答案能够满足您的需求。如果您有任何问题或需要进一步的帮助,请随时提问。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的视频

领券