代码之家  ›  专栏  ›  技术社区  ›  Tofik

typeof().GetFields不显示列表<T>

  •  0
  • Tofik  · 技术社区  · 8 年前

    我有课:

    public class Order
    {
        public string PO_NO { get; set; }
        public string APPROVED_DATE { get; set; }
        public string SPPLR_CONTACT { get; set; } //SPPLR_Mailbox
        public string PO_REMARKS { get; set; }
        public string PO_CREATION_DATE { get; set; }
        public string SPPLR_CD { get; set; }
        public string OWN_CD { get; set; }
        public string LOCATION_CODE { get; set; }
        public string LOCATION_ID { get; set; }
        public string SHIPPING_TYPE { get; set; }
        public string FREIGHT_TERMS { get; set; }
        public string PO_STATUS { get; set; }
        public string CONTACT_PERSON { get; set; }
        public string CONTACT_PERSON_MAIL { get; set; }
        public string CONTACT_PERSON_PHONE { get; set; }
    
        public string ATTRIBUTE01 { get; set; }
        public string ATTRIBUTE02 { get; set; }
        public string ATTRIBUTE03 { get; set; }
        public string ATTRIBUTE04 { get; set; }
        public string ATTRIBUTE05 { get; set; }
        public List<OrderDetails> OrderDetails = new List<OrderDetails>();
    }
    

    我试着这样“列举”它

    FieldInfo[] fields = typeof(Order).GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
    foreach (var field in fields)
    {
        Debug.WriteLine(field.Name + "---" + field.FieldType);
    }
    

    获取此输出:

    <PO_NO>k__BackingField---System.String
    <APPROVED_DATE>k__BackingField---System.String
    <SPPLR_CONTACT>k__BackingField---System.String
    <PO_REMARKS>k__BackingField---System.String
    <PO_CREATION_DATE>k__BackingField---System.String
    <SPPLR_CD>k__BackingField---System.String
    <OWN_CD>k__BackingField---System.String
    <LOCATION_CODE>k__BackingField---System.String
    <LOCATION_ID>k__BackingField---System.String
    <SHIPPING_TYPE>k__BackingField---System.String
    <FREIGHT_TERMS>k__BackingField---System.String
    <PO_STATUS>k__BackingField---System.String
    <CONTACT_PERSON>k__BackingField---System.String
    <CONTACT_PERSON_MAIL>k__BackingField---System.String
    <CONTACT_PERSON_PHONE>k__BackingField---System.String
    <ATTRIBUTE01>k__BackingField---System.String
    <ATTRIBUTE02>k__BackingField---System.String
    <ATTRIBUTE03>k__BackingField---System.String
    <ATTRIBUTE04>k__BackingField---System.String
    <ATTRIBUTE05>k__BackingField---System.String
    

    清单不见了,有什么不对,或者我能做些什么,把它列出来?

    我正在尝试为myslef创建一个库,我可以将类挂起并生成整个xml,但是我不能动态地构建结构,因为我没有得到那个列表(子节点)

    1 回复  |  直到 8 年前
        1
  •  0
  •   TomáÅ¡ Filip    8 年前

    正如@thehenny所说,绑定标志是不对的。我刚刚添加了BindingFlags.Public

    所以代码来自:

    FieldInfo[] fields = typeof(Order).GetFields(BindingFlags.NonPublic | BindingFlags.Instance );
           foreach (var field in fields)
                {
                    Debug.WriteLine(field.Name + "---" + field.FieldType);
                }
    

    收件人:

    FieldInfo[] fields = typeof(Order).GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);
                foreach (var field in fields)
                {
                    Debug.WriteLine(field.Name + "---" + field.FieldType);
                }