Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.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#FieldInfo对象内部的类型和值?_C#_Class_Serialization_Static_Fieldinfo - Fatal编程技术网

如何获取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的属性不是静态的,因此必须在对象实例上工作)的内容。我想我理解-将尝试一下