|
@@ -225,7 +225,7 @@ public class ObjectWrapper : ObjectInstance, IObjectWrapper, IEquatable<ObjectWr
|
|
|
yield return new KeyValuePair<JsValue, PropertyDescriptor>(key, GetOwnProperty(key));
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
private IEnumerable<JsValue> EnumerateOwnPropertyKeys(Types types)
|
|
|
{
|
|
|
// prefer object order, add possible other properties after
|
|
@@ -235,8 +235,7 @@ public class ObjectWrapper : ObjectInstance, IObjectWrapper, IEquatable<ObjectWr
|
|
|
var keys = (ICollection<string>) _typeDescriptor.KeysAccessor!.GetValue(Target)!;
|
|
|
foreach (var key in keys)
|
|
|
{
|
|
|
- var jsString = JsString.Create(key);
|
|
|
- yield return jsString;
|
|
|
+ yield return JsString.Create(key);
|
|
|
}
|
|
|
}
|
|
|
else if (includeStrings && Target is IDictionary dictionary)
|
|
@@ -248,28 +247,46 @@ public class ObjectWrapper : ObjectInstance, IObjectWrapper, IEquatable<ObjectWr
|
|
|
if (stringKey is not null
|
|
|
|| _engine.TypeConverter.TryConvert(key, typeof(string), CultureInfo.InvariantCulture, out stringKey))
|
|
|
{
|
|
|
- var jsString = JsString.Create((string) stringKey!);
|
|
|
- yield return jsString;
|
|
|
+ yield return JsString.Create((string) stringKey!);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
else if (includeStrings)
|
|
|
{
|
|
|
- // we take public properties and fields
|
|
|
- foreach (var p in ClrType.GetProperties(BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public))
|
|
|
+ // we take public properties, fields and methods
|
|
|
+ const BindingFlags BindingFlags = BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public;
|
|
|
+
|
|
|
+ if ((_engine.Options.Interop.ObjectWrapperReportedMemberTypes & MemberTypes.Property) == MemberTypes.Property)
|
|
|
+ {
|
|
|
+ foreach (var p in ClrType.GetProperties(BindingFlags))
|
|
|
+ {
|
|
|
+ var indexParameters = p.GetIndexParameters();
|
|
|
+ if (indexParameters.Length == 0)
|
|
|
+ {
|
|
|
+ yield return JsString.Create(p.Name);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if ((_engine.Options.Interop.ObjectWrapperReportedMemberTypes & MemberTypes.Field) == MemberTypes.Field)
|
|
|
{
|
|
|
- var indexParameters = p.GetIndexParameters();
|
|
|
- if (indexParameters.Length == 0)
|
|
|
+ foreach (var f in ClrType.GetFields(BindingFlags | BindingFlags.DeclaredOnly))
|
|
|
{
|
|
|
- var jsString = JsString.Create(p.Name);
|
|
|
- yield return jsString;
|
|
|
+ yield return JsString.Create(f.Name);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- foreach (var f in ClrType.GetFields(BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public))
|
|
|
+ if ((_engine.Options.Interop.ObjectWrapperReportedMemberTypes & MemberTypes.Method) == MemberTypes.Method)
|
|
|
{
|
|
|
- var jsString = JsString.Create(f.Name);
|
|
|
- yield return jsString;
|
|
|
+ foreach (var m in ClrType.GetMethods(BindingFlags | BindingFlags.DeclaredOnly))
|
|
|
+ {
|
|
|
+ if (m.IsSpecialName)
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ yield return JsString.Create(m.Name);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|