Tôi có một đối tượng có tập hợp thuộc tính. Khi tôi nhận được thực thể cụ thể, tôi có thể thấy trường tôi đang tìm kiếm (opportunityid
) và rằng thuộc tính Value
là Guid
cho cơ hội này. Đây là giá trị tôi muốn, nhưng nó sẽ không luôn luôn là một cơ hội, và do đó tôi không thể luôn luôn nhìn vào opportunityid
, vì vậy tôi cần phải nhận được các lĩnh vực dựa trên đầu vào được cung cấp bởi người sử dụng.Làm cách nào để bạn nhận được Giá trị của một thuộc tính từ PropertyInfo?
Mã của tôi cho đến nay là:
Guid attrGuid = new Guid();
BusinessEntityCollection members = CrmWebService.RetrieveMultiple(query);
if (members.BusinessEntities.Length > 0)
{
try
{
dynamic attr = members.BusinessEntities[0];
//Get collection of opportunity properties
System.Reflection.PropertyInfo[] Props = attr.GetType().GetProperties();
System.Reflection.PropertyInfo info = Props.FirstOrDefault(x => x.Name == GuidAttributeName);
attrGuid = info.PropertyType.GUID; //doesn't work.
}
catch (Exception ex)
{
throw new Exception("An error occurred when retrieving the value for " + attributeName + ". Error: " + ex.Message);
}
}
Các động attr
chứa lĩnh vực tôi đang tìm kiếm (trong trường hợp này opportunityid
), do đó có chứa một lĩnh vực giá trị, đó là đúng Guid
. Tuy nhiên, khi tôi nhận được thông tin PropertyInfo
(opportunityid
), nó không còn thuộc tính Value
nữa. Tôi đã thử nhìn vào PropertyType.GUID
nhưng điều này không trả về đúng Guid
. Làm thế nào tôi có thể nhận được giá trị cho tài sản này?
Giải thích tuyệt vời! GetValue() có tham số thứ 2 phải là null. – helb
Âm thanh như những gì tôi cần. Chỉ cần kiểm tra nó để chắc chắn rằng tôi hiểu. – sr28
Hmmm, tôi chắc chắn phương pháp này sẽ hoạt động nếu tôi hiểu nó. Tuy nhiên, tôi nhận được một ngoại lệ nói rằng nó không thể chuyển đổi CRMWebService.Key để System.Guid. Tôi đã thực hiện về cơ bản attrGuid = (Guid) info.GetValue (attr, null); – sr28