0

これに対する解決策を見つけようとしましたが、できません。次のクラスとプログラムが与えられます。

[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 (間違っていなければ) はこのカスタム型のメタデータです。 、しかし、その中にあるメンバー型の名前と値を取得する方法がわかりません。

これが理にかなっていることを願っています...

4

0 に答える 0