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
https://www.sharpserializer.net
Other
114 stars 28 forks source link

Ignore Public Static Properties #22

Open bluebat-swiss opened 2 years ago

bluebat-swiss commented 2 years ago

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)