|
|
|
@ -1,4 +1,6 @@ |
|
|
|
using Shouldly; |
|
|
|
using System; |
|
|
|
using Microsoft.Extensions.DependencyInjection; |
|
|
|
using Shouldly; |
|
|
|
using Volo.Abp.Data; |
|
|
|
using Volo.Abp.Json.SystemTextJson; |
|
|
|
using Volo.Abp.ObjectExtending; |
|
|
|
@ -8,23 +10,23 @@ namespace Volo.Abp.Json |
|
|
|
{ |
|
|
|
public class AbpSystemTextJsonSerializerProvider_Tests : AbpJsonTestBase |
|
|
|
{ |
|
|
|
private readonly AbpSystemTextJsonSerializerProvider _jsonSerializer; |
|
|
|
protected AbpSystemTextJsonSerializerProvider JsonSerializer; |
|
|
|
|
|
|
|
public AbpSystemTextJsonSerializerProvider_Tests() |
|
|
|
{ |
|
|
|
_jsonSerializer = GetRequiredService<AbpSystemTextJsonSerializerProvider>(); |
|
|
|
JsonSerializer = GetRequiredService<AbpSystemTextJsonSerializerProvider>(); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Serialize_Deserialize_With_Boolean() |
|
|
|
{ |
|
|
|
var json = "{\"name\":\"abp\",\"IsDeleted\":\"fAlSe\"}"; |
|
|
|
var file = _jsonSerializer.Deserialize<FileWithBoolean>(json); |
|
|
|
var file = JsonSerializer.Deserialize<FileWithBoolean>(json); |
|
|
|
file.Name.ShouldBe("abp"); |
|
|
|
file.IsDeleted.ShouldBeFalse(); |
|
|
|
|
|
|
|
file.IsDeleted = false; |
|
|
|
var newJson = _jsonSerializer.Serialize(file); |
|
|
|
var newJson = JsonSerializer.Serialize(file); |
|
|
|
newJson.ShouldBe("{\"name\":\"abp\",\"isDeleted\":false}"); |
|
|
|
} |
|
|
|
|
|
|
|
@ -32,19 +34,19 @@ namespace Volo.Abp.Json |
|
|
|
public void Serialize_Deserialize_With_Nullable_Boolean() |
|
|
|
{ |
|
|
|
var json = "{\"name\":\"abp\",\"IsDeleted\":null}"; |
|
|
|
var file = _jsonSerializer.Deserialize<FileWithNullableBoolean>(json); |
|
|
|
var file = JsonSerializer.Deserialize<FileWithNullableBoolean>(json); |
|
|
|
file.Name.ShouldBe("abp"); |
|
|
|
file.IsDeleted.ShouldBeNull(); |
|
|
|
|
|
|
|
var newJson = _jsonSerializer.Serialize(file); |
|
|
|
var newJson = JsonSerializer.Serialize(file); |
|
|
|
newJson.ShouldBe("{\"name\":\"abp\",\"isDeleted\":null}"); |
|
|
|
|
|
|
|
json = "{\"name\":\"abp\",\"IsDeleted\":\"true\"}"; |
|
|
|
file = _jsonSerializer.Deserialize<FileWithNullableBoolean>(json); |
|
|
|
file = JsonSerializer.Deserialize<FileWithNullableBoolean>(json); |
|
|
|
file.IsDeleted.ShouldNotBeNull(); |
|
|
|
file.IsDeleted.Value.ShouldBeTrue(); |
|
|
|
|
|
|
|
newJson = _jsonSerializer.Serialize(file); |
|
|
|
newJson = JsonSerializer.Serialize(file); |
|
|
|
newJson.ShouldBe("{\"name\":\"abp\",\"isDeleted\":true}"); |
|
|
|
} |
|
|
|
|
|
|
|
@ -52,11 +54,11 @@ namespace Volo.Abp.Json |
|
|
|
public void Serialize_Deserialize_With_Enum() |
|
|
|
{ |
|
|
|
var json = "{\"name\":\"abp\",\"type\":\"Exe\"}"; |
|
|
|
var file = _jsonSerializer.Deserialize<FileWithEnum>(json); |
|
|
|
var file = JsonSerializer.Deserialize<FileWithEnum>(json); |
|
|
|
file.Name.ShouldBe("abp"); |
|
|
|
file.Type.ShouldBe(FileType.Exe); |
|
|
|
|
|
|
|
var newJson = _jsonSerializer.Serialize(file); |
|
|
|
var newJson = JsonSerializer.Serialize(file); |
|
|
|
newJson.ShouldBe("{\"name\":\"abp\",\"type\":2}"); |
|
|
|
} |
|
|
|
|
|
|
|
@ -64,35 +66,73 @@ namespace Volo.Abp.Json |
|
|
|
public void Serialize_Deserialize_With_Nullable_Enum() |
|
|
|
{ |
|
|
|
var json = "{\"name\":\"abp\",\"type\":null}"; |
|
|
|
var file = _jsonSerializer.Deserialize<FileWithNullableEnum>(json); |
|
|
|
var file = JsonSerializer.Deserialize<FileWithNullableEnum>(json); |
|
|
|
file.Name.ShouldBe("abp"); |
|
|
|
file.Type.ShouldBeNull(); |
|
|
|
|
|
|
|
var newJson = _jsonSerializer.Serialize(file); |
|
|
|
var newJson = JsonSerializer.Serialize(file); |
|
|
|
newJson.ShouldBe("{\"name\":\"abp\",\"type\":null}"); |
|
|
|
|
|
|
|
json = "{\"name\":\"abp\",\"type\":\"Exe\"}"; |
|
|
|
file = _jsonSerializer.Deserialize<FileWithNullableEnum>(json); |
|
|
|
file = JsonSerializer.Deserialize<FileWithNullableEnum>(json); |
|
|
|
file.Type.ShouldNotBeNull(); |
|
|
|
file.Type.ShouldBe(FileType.Exe); |
|
|
|
|
|
|
|
newJson = _jsonSerializer.Serialize(file); |
|
|
|
newJson = JsonSerializer.Serialize(file); |
|
|
|
newJson.ShouldBe("{\"name\":\"abp\",\"type\":2}"); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Serialize_Deserialize_ExtensibleObject() |
|
|
|
{ |
|
|
|
var json = "{\"name\":\"test\",\"extraProperties\":{\"One\":\"123\",\"Two\":456}}"; |
|
|
|
var extensibleObject = _jsonSerializer.Deserialize<TestExtensibleObjectClass>(json); |
|
|
|
var extensibleObject = JsonSerializer.Deserialize<TestExtensibleObjectClass>(json); |
|
|
|
extensibleObject.GetProperty("One").ShouldBe("123"); |
|
|
|
extensibleObject.GetProperty("Two").ShouldBe(456); |
|
|
|
|
|
|
|
var newJson = _jsonSerializer.Serialize(extensibleObject); |
|
|
|
var newJson = JsonSerializer.Serialize(extensibleObject); |
|
|
|
newJson.ShouldBe(json); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Serialize_Deserialize_ExtensibleObject_With_ExtraProperties_String() |
|
|
|
{ |
|
|
|
var json = "{\"name\":\"test\"}"; |
|
|
|
var extensibleObject = JsonSerializer.Deserialize<TestExtensibleObjectClass>(json); |
|
|
|
extensibleObject.ExtraProperties.ShouldNotBeNull(); |
|
|
|
extensibleObject.ExtraProperties.ShouldBeEmpty(); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Serialize_Deserialize_With_Datetime() |
|
|
|
{ |
|
|
|
var json = "{\"name\":\"abp\",\"creationTime\":\"2020-11-20T00:00:00\"}"; |
|
|
|
var file = JsonSerializer.Deserialize<FileWithDatetime>(json); |
|
|
|
file.CreationTime.Year.ShouldBe(2020); |
|
|
|
file.CreationTime.Month.ShouldBe(11); |
|
|
|
file.CreationTime.Day.ShouldBe(20); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Serialize_Deserialize_With_Nullable_Datetime() |
|
|
|
{ |
|
|
|
var json = "{\"name\":\"abp\",\"creationTime\":null}"; |
|
|
|
var file = JsonSerializer.Deserialize<FileWithNullableDatetime>(json); |
|
|
|
file.CreationTime.ShouldBeNull(); |
|
|
|
|
|
|
|
json = "{\"name\":\"abp\"}"; |
|
|
|
file = JsonSerializer.Deserialize<FileWithNullableDatetime>(json); |
|
|
|
file.CreationTime.ShouldBeNull(); |
|
|
|
|
|
|
|
json = "{\"name\":\"abp\",\"creationTime\":\"2020-11-20T00:00:00\"}"; |
|
|
|
file = JsonSerializer.Deserialize<FileWithNullableDatetime>(json); |
|
|
|
file.CreationTime.ShouldNotBeNull(); |
|
|
|
|
|
|
|
file.CreationTime.Value.Year.ShouldBe(2020); |
|
|
|
file.CreationTime.Value.Month.ShouldBe(11); |
|
|
|
file.CreationTime.Value.Day.ShouldBe(20); |
|
|
|
} |
|
|
|
|
|
|
|
class TestExtensibleObjectClass : ExtensibleObject |
|
|
|
{ |
|
|
|
public string Name { get; set; } |
|
|
|
@ -131,5 +171,60 @@ namespace Volo.Abp.Json |
|
|
|
Zip = 0, |
|
|
|
Exe = 2 |
|
|
|
} |
|
|
|
|
|
|
|
protected class FileWithDatetime |
|
|
|
{ |
|
|
|
public string Name { get; set; } |
|
|
|
|
|
|
|
public DateTime CreationTime { get; set; } |
|
|
|
} |
|
|
|
|
|
|
|
protected class FileWithNullableDatetime |
|
|
|
{ |
|
|
|
public string Name { get; set; } |
|
|
|
|
|
|
|
public DateTime? CreationTime { get; set; } |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public class FormatAbpSystemTextJsonSerializerProvider_Tests : AbpSystemTextJsonSerializerProvider_Tests |
|
|
|
{ |
|
|
|
protected override void AfterAddApplication(IServiceCollection services) |
|
|
|
{ |
|
|
|
services.Configure<AbpJsonOptions>(options => |
|
|
|
{ |
|
|
|
options.DefaultDateTimeFormat = "yyyy*MM*dd"; |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Serialize_Deserialize_With_Format_Datetime() |
|
|
|
{ |
|
|
|
var json = "{\"name\":\"abp\",\"creationTime\":\"2020*11*20\"}"; |
|
|
|
var file = JsonSerializer.Deserialize<FileWithDatetime>(json); |
|
|
|
file.CreationTime.Year.ShouldBe(2020); |
|
|
|
file.CreationTime.Month.ShouldBe(11); |
|
|
|
file.CreationTime.Day.ShouldBe(20); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Serialize_Deserialize_With_Nullable_Format_Datetime() |
|
|
|
{ |
|
|
|
var json = "{\"name\":\"abp\",\"creationTime\":null}"; |
|
|
|
var file = JsonSerializer.Deserialize<FileWithNullableDatetime>(json); |
|
|
|
file.CreationTime.ShouldBeNull(); |
|
|
|
|
|
|
|
json = "{\"name\":\"abp\"}"; |
|
|
|
file = JsonSerializer.Deserialize<FileWithNullableDatetime>(json); |
|
|
|
file.CreationTime.ShouldBeNull(); |
|
|
|
|
|
|
|
json = "{\"name\":\"abp\",\"creationTime\":\"2020*11*20\"}"; |
|
|
|
file = JsonSerializer.Deserialize<FileWithNullableDatetime>(json); |
|
|
|
file.CreationTime.ShouldNotBeNull(); |
|
|
|
|
|
|
|
file.CreationTime.Value.Year.ShouldBe(2020); |
|
|
|
file.CreationTime.Value.Month.ShouldBe(11); |
|
|
|
file.CreationTime.Value.Day.ShouldBe(20); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|