• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

HicServices / RDMP / 6237307473

19 Sep 2023 04:02PM UTC coverage: 57.015% (-0.4%) from 57.44%
6237307473

push

github

web-flow
Feature/rc4 (#1570)

* Syntax tidying
* Dependency updates
* Event handling singletons (ThrowImmediately and co)

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: James A Sutherland <>
Co-authored-by: James Friel <jfriel001@dundee.ac.uk>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

10734 of 20259 branches covered (0.0%)

Branch coverage included in aggregate %.

5922 of 5922 new or added lines in 565 files covered. (100.0%)

30687 of 52390 relevant lines covered (58.57%)

7361.8 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/Rdmp.Core/ReusableLibraryCode/Serialization/IgnorableSerializerContractResolver.cs
1
// Copyright (c) The University of Dundee 2018-2019
2
// This file is part of the Research Data Management Platform (RDMP).
3
// RDMP is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
4
// RDMP is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
5
// You should have received a copy of the GNU General Public License along with RDMP. If not, see <https://www.gnu.org/licenses/>.
6

7
using System;
8
using System.Collections.Generic;
9
using System.Reflection;
10
using Newtonsoft.Json;
11
using Newtonsoft.Json.Serialization;
12

13
namespace Rdmp.Core.ReusableLibraryCode.Serialization;
14

15
/// <summary>
16
/// Special JsonConvert resolver that allows you to ignore properties.  See https://stackoverflow.com/a/13588192/1037948
17
/// </summary>
18
public class IgnorableSerializerContractResolver : DefaultContractResolver
19
{
20
    protected readonly Dictionary<Type, HashSet<string>> Ignores;
21

22
    public IgnorableSerializerContractResolver()
×
23
    {
24
        Ignores = new Dictionary<Type, HashSet<string>>();
×
25
    }
×
26

27
    /// <summary>
28
    /// Explicitly ignore the given property(s) for the given type
29
    /// </summary>
30
    /// <param name="type"></param>
31
    /// <param name="propertyName">one or more properties to ignore.  Leave empty to ignore the type entirely.</param>
32
    public void Ignore(Type type, params string[] propertyName)
33
    {
34
        // start bucket if DNE
35
        if (!Ignores.ContainsKey(type)) Ignores[type] = new HashSet<string>();
×
36

37
        foreach (var prop in propertyName) Ignores[type].Add(prop);
×
38
    }
×
39

40
    /// <summary>
41
    /// Is the given property for the given type ignored?
42
    /// </summary>
43
    /// <param name="type"></param>
44
    /// <param name="propertyName"></param>
45
    /// <returns></returns>
46
    public bool IsIgnored(Type type, string propertyName)
47
    {
48
        if (!Ignores.ContainsKey(type)) return false;
×
49

50
        // if no properties provided, ignore the type entirely
51
        return Ignores[type].Count == 0 || Ignores[type].Contains(propertyName);
×
52
    }
53

54
    /// <summary>
55
    /// The decision logic goes here
56
    /// </summary>
57
    /// <param name="member"></param>
58
    /// <param name="memberSerialization"></param>
59
    /// <returns></returns>
60
    protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
61
    {
62
        var property = base.CreateProperty(member, memberSerialization);
×
63

64
        if (IsIgnored(property.DeclaringType, property.PropertyName)
×
65
            // need to check basetype as well for EF -- @per comment by user576838 - LT: but it can be null, so check that too!
×
66
            || (property.DeclaringType?.BaseType != null &&
×
67
                IsIgnored(property.DeclaringType.BaseType, property.PropertyName)))
×
68
            property.ShouldSerialize = _ => false;
×
69

70
        return property;
×
71
    }
72
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc