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 输出,因为很容易出错。
类似于
我正在使用 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 输出,因为很容易出错。