polenter / SharpSerializer

SharpSerializer can serialize types like: multidimensional array, nested array, array-of-arrays, polymorphic object (where value is inherited from the property type), generic type, generic listing (i.e. dictionary, collection) and many more, with a single line of code

Home Page:https://www.sharpserializer.net

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Ignore Public Static Properties

bluebat-swiss opened this issue · comments

Hi

There is a problem with TypeExtensions.GetPublicInstanceProperties(). it get's also all static and nonpublic properties.

A short blink into ILSpy I saw that GetRuntimeProperties() will call GetProperties(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic). So GetPublicInstanceProperties() will also get static and nonpublic properties.

I changed the code to solve this problem:

  1. extended AdvancedSharpSerializerBinarySettings with two new properties
    public bool IncludeStaticProperties { get; set; }
    public bool IncludeNonPublicProperties { get; set; }

  2. extended the PropertyProvider with two new properties
    public bool IncludeStatic { get; set; }
    public bool IncludeNonPublic { get; set; }

  3. assigning the props in SharpSerializer.initialize()
    PropertyProvider.IncludeNonPublic = settings.AdvancedSettings.IncludeNonPublicProperties;
    PropertyProvider.IncludeStatic = settings.AdvancedSettings.IncludeStaticProperties;

  4. finally changed PropertyProvider.GetAllProperties()

protected virtual PropertyInfo[] GetAllProperties(Type type)
{
  var flags = BindingFlags.Instance | BindingFlags.Public;
  
  if (IncludeStatic)
    flags |= BindingFlags.Static;
  
  if (IncludeNonPublic)
    flags |= BindingFlags.NonPublic;
  
  return type.GetProperties(flags);
}

Hope, this helps someone with the same problem.
Cheers, jaz (bluebat)