如何获取C#FieldInfo对象内部的类型和值?
我试图找到一个解决办法,但我不能。给定以下课程和计划:如何获取C#FieldInfo对象内部的类型和值?,c#,class,serialization,static,fieldinfo,C#,Class,Serialization,Static,Fieldinfo,我试图找到一个解决办法,但我不能。给定以下课程和计划: [Serializable] public class SomeClass { public string OneProp { get; set; } public string TwoProp { get; set; } public string OneField; public string TwoField; } [Serializable] public class Class1 { pu
[Serializable]
public class SomeClass
{
public string OneProp { get; set; }
public string TwoProp { get; set; }
public string OneField;
public string TwoField;
}
[Serializable]
public class Class1
{
public static string gsFoo { get; set; }
public static string gsGar { get; set; }
public static string gsFooField;
public static string gsGarField;
public static SomeClass someClass = new SomeClass();
}
public class Program
{
private static void PrintValues(Type type)
{
foreach (var field in type.GetFields())
{
Console.WriteLine("{0}={1}", field.Name, field.GetValue(null));
var v = field.GetValue(null);
}
foreach (var prop in type.GetProperties())
{
Console.WriteLine("{0}={1}", prop.Name, prop.GetValue(type, null));
var v = prop.GetValue(null,null);
}
}
static void Main(string[] args)
{
Class1.gsGar = "gar prop";
Class1.gsFoo = "foo prop";
Class1.gsFooField = "foo field";
Class1.gsGarField = "gar field";
Class1.someClass.OneField = "1 field";
Class1.someClass.TwoField = "2 field";
Class1.someClass.OneProp = "1 prop";
Class1.someClass.TwoProp = "2 prop";
PrintValues(typeof(Class1));
while (true)
{
}
}
}
如果我设置Class1.SomeClass的属性和字段,我如何序列化Class1并查看SomeClass的名称/值,使其打印如下:
Class1.SomeClass.OneProp = "1 prop"
Class1.SomeClass.TwoProp = "2 prop"
Class1.SomeClass.OneField = "1 field"
Class1.SomeClass.TwoField = "2 field"
我可以使用GetType()和GetValue()从非自定义类型的其他静态类型的FieldInfo和PropertyInfo中获取名称/值,但在本例中,FieldInfo(如果我没有弄错的话)是此自定义类型上的元数据,但我看不到如何获取成员类型的名称和值
我希望这是有意义的…告诉我们你到目前为止做了什么,然后我们可以告诉你你做错了什么,或者你的误解是什么。我已经编辑了这篇文章。谢谢带有自定义类型字段的对象在逻辑上是树。FieldInfo.FieldType提供类型。树最好用递归进行迭代。将一棵树展平成易于序列化的东西会让它倒退一段时间,BinaryFormatter并没有什么不重要的。以前已经这样做过。当您迭代Class1字段时,您的代码最终将到达someClass字段。此时代码所做的一切是:
Console.WriteLine(“{0}={1}”,“someClass”,Class1.someClass)
。看看这句话——你希望Console.WriteLine能做什么样的黑魔法?相反,当您遇到具有自定义类型的字段/属性时,应该实现并调用类似于PrintInstanceValues(object o)
(由于SomeClass的属性不是静态的,因此必须在对象实例上工作)的内容。我想我理解-将尝试一下