C# 从实体元数据中提取属性的显示名称

C# 从实体元数据中提取属性的显示名称,c#,dynamics-crm,dynamics-crm-sdk,C#,Dynamics Crm,Dynamics Crm Sdk,我对使用C#从CRM获取数据相当陌生,我试图获取CRM上所有属性的显示名称,当我尝试时,我得到的结果是Microsoft.Xrm.Sdk.Label,获取该标签的值似乎并不直接,有人能给我指出正确的方向吗 using System; using Microsoft.Xrm.Tooling.Connector; using Microsoft.Xrm.Sdk; using Microsoft.Xrm.Sdk.Messages; using Microsoft.Xrm.Sdk.Metadat

我对使用C#从CRM获取数据相当陌生,我试图获取CRM上所有属性的显示名称,当我尝试时,我得到的结果是
Microsoft.Xrm.Sdk.Label
,获取该标签的值似乎并不直接,有人能给我指出正确的方向吗

using System;    
using Microsoft.Xrm.Tooling.Connector;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Messages;
using Microsoft.Xrm.Sdk.Metadata;


namespace CRM_MetaData_Download
{
    class Program
    {
        static void Main(string[] args)
        {
            try {
                var connectionString = @"AuthType = Office365; Url = https://CRMINFORMATION";
                CrmServiceClient conn = new CrmServiceClient(connectionString);

                IOrganizationService service;
                service = (IOrganizationService)conn.OrganizationWebProxyClient != null ? (IOrganizationService)conn.OrganizationWebProxyClient : (IOrganizationService)conn.OrganizationServiceProxy;
                RetrieveEntityRequest retrieveEntityRequest = new RetrieveEntityRequest
                {
                    EntityFilters = EntityFilters.All,
                    LogicalName = "account"
                };
                RetrieveEntityResponse retrieveAccountEntityResponse = (RetrieveEntityResponse)service.Execute(retrieveEntityRequest);
                EntityMetadata AccountEntity = retrieveAccountEntityResponse.EntityMetadata;

                Console.WriteLine("Account entity attributes:");
                foreach (object attribute in AccountEntity.Attributes)
                {
                    AttributeMetadata a = (AttributeMetadata)attribute;
                    Console.WriteLine(a.LogicalName + "    " +
                        a.Description + "    " +
                        a.DisplayName + "    " +
                        a.EntityLogicalName + "    " +
                        a.SchemaName + "    " +
                        a.AttributeType + "    "
                        );
                }
                Console.ReadLine();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }

    }
}

由于Dynamics CRM支持多语言功能,因此将为每种语言存储显示名称标签。您可以按如下方式获得:

a.DisplayName.UserLocalizedLabel.Label

请注意:有些实体和某些字段的DisplayName或UserLocalizedLabel可能为null(特别是内部的),SchemaName或LogicalName总是包含一个值,如果DisplayName或UserLocalizedLabel为null,它们可以用作默认值。查看这一点2小时后,您就可以进来节省时间了!谢谢,我真不敢相信我竟然忽视了这一点……我希望你享受你的一生@萨缪尔达吉谢谢你。另外,请考虑Gudio OBWEY所做的那一点,这是我注意到的第一件事,我把它扔进了一个尝试{} catch {},如果它有问题抓住数据,我只是把信息转换成我认为的Null抱歉: