Skip to content

Commit

Permalink
resolved #646
Browse files Browse the repository at this point in the history
  • Loading branch information
ismcagdas committed Apr 8, 2016
1 parent d4250f3 commit 8a6471d
Show file tree
Hide file tree
Showing 7 changed files with 83 additions and 2 deletions.
1 change: 1 addition & 0 deletions src/Abp/Abp.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@
<ItemGroup>
<Compile Include="AbpConsts.cs" />
<Compile Include="AbpServiceBase.cs" />
<Compile Include="Auditing\AuditingContractResolver.cs" />
<Compile Include="Authorization\PermissionDependencyContext.cs" />
<Compile Include="Authorization\PermissionDependencyExtensions.cs" />
<Compile Include="BackgroundJobs\BackgroundJobConfiguration.cs" />
Expand Down
24 changes: 24 additions & 0 deletions src/Abp/Auditing/AuditingContractResolver.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
using System.Reflection;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;

namespace Abp.Auditing
{
/// <summary>
/// Decides which properties of auditing class to be serialized
/// </summary>
public class AuditingContractResolver : CamelCasePropertyNamesContractResolver
{
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
JsonProperty property = base.CreateProperty(member, memberSerialization);

if (member.IsDefined(typeof(DisableAuditingAttribute)) || member.IsDefined(typeof(JsonIgnoreAttribute)))
{
property.ShouldSerialize = instance => false;
}

return property;
}
}
}
11 changes: 11 additions & 0 deletions src/Abp/Auditing/AuditingHelper.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System.Linq;
using System.Reflection;
using Abp.Runtime.Session;
using Newtonsoft.Json;

namespace Abp.Auditing
{
Expand Down Expand Up @@ -59,5 +60,15 @@ public static bool ShouldSaveAudit(MethodInfo methodInfo, IAuditingConfiguration

return defaultValue;
}

public static string Serialize(object obj)
{
var options = new JsonSerializerSettings
{
ContractResolver = new AuditingContractResolver()
};

return JsonConvert.SerializeObject(obj, options);
}
}
}
2 changes: 1 addition & 1 deletion src/Abp/Auditing/AuditingInterceptor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ private string ConvertArgumentsToJson(IInvocation invocation)
dictionary[parameter.Name] = argument;
}

return dictionary.ToJsonString(true);
return AuditingHelper.Serialize(dictionary);
}
catch (Exception ex)
{
Expand Down
2 changes: 1 addition & 1 deletion src/Abp/Auditing/DisableAuditingAttribute.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ namespace Abp.Auditing
/// Used to disable auditing for a single method or
/// all methods of a class or interface.
/// </summary>
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method | AttributeTargets.Property)]
public class DisableAuditingAttribute : Attribute
{

Expand Down
1 change: 1 addition & 0 deletions src/Tests/Abp.Tests/Abp.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@
<ItemGroup>
<Compile Include="Application\Navigation\Menu_Tests.cs" />
<Compile Include="Application\Navigation\NavigationTestCase.cs" />
<Compile Include="Auditing\AuditingHelper_Tests.cs" />
<Compile Include="BackgroundJobs\InMemoryBackgroundJobStore_Tests.cs" />
<Compile Include="Collections\Extensions\ListExtensions_Tests.cs" />
<Compile Include="DisposeAction_Test.cs" />
Expand Down
44 changes: 44 additions & 0 deletions src/Tests/Abp.Tests/Auditing/AuditingHelper_Tests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
using Abp.Auditing;
using Shouldly;
using Xunit;

namespace Abp.Tests.Auditing
{
public class AuditingHelper_Tests
{
[Fact]
public void Ignored_Properties_Should_Not_Be_Serialized()
{
var json = AuditingHelper.Serialize(new AuditingHelperTestPersonDto
{
FullName = "John Doe",
Age = 18,
School = new AuditingHelperTestSchoolDto
{
Name = "Crosswell Secondary",
Address = "Broadway Ave, West Bend"
}
});

json.ShouldBe("{\"fullName\":\"John Doe\",\"school\":{\"name\":\"Crosswell Secondary\"}}");
}

public class AuditingHelperTestPersonDto
{
public string FullName { get; set; }

[DisableAuditing]
public int Age { get; set; }

public AuditingHelperTestSchoolDto School { get; set; }
}

public class AuditingHelperTestSchoolDto
{
public string Name { get; set; }

[DisableAuditing]
public string Address { get; set; }
}
}
}

0 comments on commit 8a6471d

Please sign in to comment.