我是 C# 新手,所以我可能无法解决我认为的问题,但是......我使用 3rd 方 SDK 来管理贷款数据。我有一个方法“GetPayload()”,它打开贷款并将最新的字段更改信息获取到“datalist”。
public object GetPayload()
{
// create list to hold field change data
List<Ignite.Auditing.DataTypes.Request.Field> DataList = new List<Ignite.Auditing.DataTypes.Request.Field>();
//create and open new session and loan based on user entered GUID
Session ses = OpenSession();
Loan loan = ses.Loans.Open(loanGuidTextBox.Text);
//call method to get the field change data for this loan
AuditTrailEntryList dataList = loan.AuditTrail.GetMostRecentEntries();
Type myTypeB = typeof(AuditTrailEntry);
FieldInfo myFieldInfo1 = myTypeB.GetField("auditRecord", BindingFlags.NonPublic | BindingFlags.Instance);
foreach (AuditTrailEntry entry in dataList)
{
FieldInfo[] fields = entry.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
// FieldInfo value = (FieldInfo)myFieldInfo1.GetValue(entry.auditRecord.PreviousValue);
FieldData fd = new FieldData
{
FieldDated = entry.Timestamp.ToUniversalTime(),
FieldDescription = entry.Field.Descriptor.ToString(),
FieldFormat = entry.Field.Format.ToString(),
FieldId = entry.Field.ID.ToString(),
NewValue = entry.Field.Value.ToString(),
// OldValue = e.PriorValue,
//OldValue = fce.PriorValue,
OldValue = myFieldInfo1.GetValue(entry).ToString(),
};
DataList.Add(fd);
}
return _serviceInfo.RequestData;
}
从那里,我对 datalist 中包含我需要的信息的每个条目进行 foreach。然后我用所需的数据填充“FieldData”对象(fd)。问题是我需要的字段之一似乎在我认为的私有字段中,基于我在调试器中看到的内容(“auditRecord”旁边的锁定图标)。 我如何访问“entry.auditRecord.PreviousValue”?我使用 Type.GetField (文档) 来获取私有成员,这有点像它获取“auditRecord”,但是我如何深入到下一个成员,即 auditRecord.PreviousValue?我只想获得 OldValue,我认为它应该是 entry.auditRecord.PreviousValue 但它似乎无法访问。没有错误消息只是错误的值。有人可以帮忙吗?