Skip to content

Commit 8d7dd28

Browse files
authored
Merge pull request #26 from MTESSDev/feature/supportAllJsonText
MDAT 1.5.1 - Add complete support for System.Text.Json Serialization…
2 parents e550a2d + a2bde50 commit 8d7dd28

12 files changed

Lines changed: 644 additions & 59 deletions

src/MDAT/MDAT.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<Company>MESS</Company>
1111
<PackageProjectUrl>https://github.com/MTESSDev/mdAT</PackageProjectUrl>
1212
<RepositoryUrl>https://github.com/MTESSDev/mdAT</RepositoryUrl>
13-
<Version>1.5.0</Version>
13+
<Version>1.5.1</Version>
1414
<Description>Markdown Auto-Tests for .net 6+, based on MSTestsV2 DataSource.</Description>
1515
</PropertyGroup>
1616

src/MDAT/MarkdownTest.cs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,11 @@
22
using Markdig;
33
using Markdig.Syntax;
44
using MDAT.Resolver;
5-
using Microsoft.VisualStudio.TestTools.UnitTesting;
65
using System.ComponentModel;
76
using System.Reflection;
87
using System.Text;
98
using YamlDotNet.Core;
109
using YamlDotNet.Serialization;
11-
using YamlDotNet.System.Text.Json;
1210

1311
namespace MDAT
1412
{
@@ -221,16 +219,16 @@ private static IDeserializer NewDeserializer(INodeTypeResolver resolver, string
221219
{
222220
DeserializerBuilder deserializer = new DeserializerBuilder()
223221
.WithTypeConverter(new ByteArayConverter(), e => e.OnBottom())
224-
.WithTypeConverter(new SystemTextJsonYamlTypeConverter())
225-
.WithTypeInspector(x => new SystemTextJsonTypeInspector(x))
222+
.WithTypeConverter(new SystemTextJsonYamlTypeConverter(false, true))
223+
.WithTypeInspector(x => new YamlDotNet.System.Text.Json.SystemTextJsonTypeInspector(x))
226224
.WithTypeConverter(new StringValuesConverter())
227225
.WithNodeTypeResolver(resolver)
228226
.WithNodeDeserializer(new KeyValuePairNodeDeserializer())
229227
.IgnoreUnmatchedProperties()
230228
.WithAttemptingUnquotedStringTypeDeserialization()
231229
.WithTagMapping(MdatConstants.IncludeTag, typeof(IncludeRef));
232230

233-
foreach(var typeConverter in MdatConfig.ListeTypeConverter)
231+
foreach (var typeConverter in MdatConfig.ListeTypeConverter)
234232
{
235233
_ = typeConverter.Where is { } ? deserializer.WithTypeConverter(typeConverter.TypeConverter!, typeConverter.Where) : deserializer.WithTypeConverter(typeConverter.TypeConverter!);
236234
}

src/MDAT/Resolver/JsonDocumentConverter.cs

Lines changed: 0 additions & 27 deletions
This file was deleted.
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
using Newtonsoft.Json;
2+
using System.Text.Json;
3+
using System.Text.Json.Nodes;
4+
5+
namespace MDAT.Resolver
6+
{
7+
public class SystemTextJsonFullConverter : JsonConverter
8+
{
9+
public override bool CanConvert(Type objectType)
10+
{
11+
return typeof(JsonNode).IsAssignableFrom(objectType)
12+
|| typeof(JsonDocument).IsAssignableFrom(objectType)
13+
|| typeof(JsonElement).IsAssignableFrom(objectType);
14+
}
15+
16+
public override void WriteJson(JsonWriter writer, object? value, Newtonsoft.Json.JsonSerializer serializer)
17+
{
18+
if (value is null)
19+
{
20+
writer.WriteNull();
21+
return;
22+
}
23+
24+
string json = value switch
25+
{
26+
JsonObject obj => obj.ToJsonString(),
27+
JsonArray arr => arr.ToJsonString(),
28+
JsonValue val => val.ToJsonString(),
29+
JsonNode node => node.ToJsonString(),
30+
JsonDocument doc => doc.RootElement.GetRawText(),
31+
JsonElement elem => elem.ToString(),
32+
_ => throw new JsonSerializationException($"Type System.Text.Json non supporté : {value.GetType()}")
33+
};
34+
35+
writer.WriteRawValue(json);
36+
}
37+
38+
public override object ReadJson(JsonReader reader, Type objectType, object? existingValue, Newtonsoft.Json.JsonSerializer serializer)
39+
{
40+
throw new JsonSerializationException("Invalid json document.");
41+
}
42+
}
43+
}

0 commit comments

Comments
 (0)