Skip to content

Commit d264366

Browse files
authored
Use Microsoft's JsonStreamConfigurationProvider class to parse Json stream into a dictionary . (#118)
1 parent 0a84618 commit d264366

2 files changed

Lines changed: 28 additions & 9 deletions

File tree

src/Winton.Extensions.Configuration.Consul/Parsers/JsonConfigurationParser.cs

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33

44
using System.Collections.Generic;
55
using System.IO;
6-
using System.Linq;
7-
using Microsoft.Extensions.Configuration;
6+
using Microsoft.Extensions.Configuration.Json;
87

98
namespace Winton.Extensions.Configuration.Consul.Parsers
109
{
@@ -14,14 +13,29 @@ namespace Winton.Extensions.Configuration.Consul.Parsers
1413
/// </summary>
1514
public sealed class JsonConfigurationParser : IConfigurationParser
1615
{
17-
/// <inheritdoc />
16+
/// <summary>
17+
/// Parse the <see cref="Stream" /> into a dictionary.
18+
/// </summary>
19+
/// <param name="stream">The stream to parse.</param>
20+
/// <returns>A dictionary representing the configuration in a flattened form.</returns>
1821
public IDictionary<string, string> Parse(Stream stream)
1922
{
20-
return new ConfigurationBuilder()
21-
.AddJsonStream(stream)
22-
.Build()
23-
.AsEnumerable()
24-
.ToDictionary(pair => pair.Key, pair => pair.Value);
23+
return JsonStreamParser.Parse(stream);
24+
}
25+
26+
private sealed class JsonStreamParser : JsonStreamConfigurationProvider
27+
{
28+
private JsonStreamParser(JsonStreamConfigurationSource source)
29+
: base(source)
30+
{
31+
}
32+
33+
internal static IDictionary<string, string> Parse(Stream stream)
34+
{
35+
var provider = new JsonStreamParser(new JsonStreamConfigurationSource { Stream = stream });
36+
provider.Load();
37+
return provider.Data;
38+
}
2539
}
2640
}
2741
}

test/Winton.Extensions.Configuration.Consul.Test/Parsers/JsonConfigurationParserTests.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,12 @@ public sealed class Parse : JsonConfigurationParserTests
2727
new object[]
2828
{
2929
"{\"parent\": {\"child\": \"Value\"} }",
30-
new Dictionary<string, string?> { { "parent", null }, { "parent:child", "Value" } }
30+
new Dictionary<string, string?> { { "parent:child", "Value" } }
31+
},
32+
new object[]
33+
{
34+
"{\"server\": {\"ip\": \"192.168.0.1\", \"port\": 5000} }",
35+
new Dictionary<string, string?> { { "server:ip", "192.168.0.1" }, { "server:port", "5000" } }
3136
},
3237
new object[]
3338
{

0 commit comments

Comments
 (0)