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

HicServices / RDMP / 7102803153

05 Dec 2023 03:19PM UTC coverage: 56.338% (-0.4%) from 56.745%
7102803153

push

github

web-flow
Bump NUnit from 3.14.0 to 4.0.0 (#1686)

10562 of 20305 branches covered (0.0%)

Branch coverage included in aggregate %.

64 of 96 new or added lines in 21 files covered. (66.67%)

161 existing lines in 17 files now uncovered.

30382 of 52370 relevant lines covered (58.01%)

7337.5 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
    private bool IsIgnored(Type type, string propertyName)
47
    {
NEW
48
        return Ignores.TryGetValue(type, out var ignore) && (
×
NEW
49
            // if no properties provided, ignore the type entirely
×
NEW
50
            ignore.Count == 0 || ignore.Contains(propertyName));
×
51
    }
52

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

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

69
        return property;
×
70
    }
71
}
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

© 2025 Coveralls, Inc