static List<MemberInfo> GetFieldsAndProperties(object target)
{
if (target == null)
{
return NoMembers;
}
return cache.GetOrAdd(target.GetType().TypeHandle, typeHandle =>
{
var messageType = Type.GetTypeFromHandle(typeHandle);
var members = new List<MemberInfo>();
foreach (var member in messageType.GetMembers(BindingFlags.Public | BindingFlags.Instance))
{
var fieldInfo = member as FieldInfo;
if (fieldInfo != null && !fieldInfo.IsInitOnly)
{
members.Add(fieldInfo);
}
var propInfo = member as PropertyInfo;
if (propInfo != null && propInfo.CanWrite)
{
members.Add(propInfo);
}
}
return members;
});
}