PropertyInfo.GetValue on Boolean 始终为 True,如何处理 False 响应

PropertyInfo.GetValue on Boolean is always True, how to handle False responses

类似于,虽然没有发布有用的答案。

我正在使用 Entity Framework 从数据库中收集对象,并且正在尝试将 Json 结构创建为字符串。但是,当以与其他类型相同的方式收集布尔值答案时,布尔值始终 returns true.

我在这里尝试将值转换为布尔值,但我最初尝试使用与其他类型相同的方法(仅使用值)。是否有此原因或修复方法?谢谢

private static void AppendObjectPropertiesInJson(StringBuilder content, Object obj)
        {
            content.Append("    {\n");
            foreach (PropertyInfo propertyInfo in obj.GetType().GetProperties())
            {
                var type = Nullable.GetUnderlyingType(propertyInfo.PropertyType) ?? propertyInfo.PropertyType;

                var name = propertyInfo.Name;
                var value = propertyInfo.GetValue(obj, null);

                if (value == null)
                    content.Append("        \"" + name + "\": null,\n");
                // Error, always returns true
                else if (type == typeof(bool))
                {
                    value = (bool)value;
                    content.Append("        \"" + name + "\": " + value.ToString().ToLower() + ",\n");
                }
                else if (type == typeof(int))
                    content.Append("        \"" + name + "\": " + value.ToString().ToLower() + ",\n");
                else if (type == typeof(string))
                    content.Append("        \"" + name + "\": " + "\"" + value.ToString() + "\",\n");
                // TODO: Handle arrays
            }
            content.Append("    },\n");
        }

edit:问题出在数据库的意外更改上。感谢所有帮助证明此代码没有问题的人

问题前提不正确; PropertyInfo.GetValue 工作正常 - 此处与零更改的方法一起使用:

    static void Main()
    {
        var obj = new Foo { Bar = true, Blap = false };
        var sb = new StringBuilder();
        AppendObjectPropertiesInJson(sb, obj);
        Console.WriteLine(sb);
    }

    class Foo
    {
        public bool Bar { get; set; }
        public bool Blap { get; set; }
    }

输出几乎-JSON:

    {
        "Bar": true,
        "Blap": false,
    },

请注意表达式 value = (bool)value 是一个多余的 unbox+box,但是:它不会改变任何结果(只是:它也没有做任何有用的事情)。

请注意,我们也可以在此处显示原生 bool

else if (type == typeof(bool))
{
    var typed = (bool)value;
    Console.WriteLine(typed ? "it was true" : "it was false");
    // ...content.Append("        \"" + name + "\": " + value.ToString().ToLower() + ",\n");
}

如果您有一个 PropertyInfo.GetValue 不起作用的示例,那么 post 该示例 。此外,请注意,不建议编写您自己的 JSON 输出,因为很容易出错。