Weknow.Text.Json.Extensions 5.1.38

There is a newer version of this package available.
See the version list below for details.
dotnet add package Weknow.Text.Json.Extensions --version 5.1.38                
NuGet\Install-Package Weknow.Text.Json.Extensions -Version 5.1.38                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Weknow.Text.Json.Extensions" Version="5.1.38" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Weknow.Text.Json.Extensions --version 5.1.38                
#r "nuget: Weknow.Text.Json.Extensions, 5.1.38"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Weknow.Text.Json.Extensions as a Cake Addin
#addin nuget:?package=Weknow.Text.Json.Extensions&version=5.1.38

// Install Weknow.Text.Json.Extensions as a Cake Tool
#tool nuget:?package=Weknow.Text.Json.Extensions&version=5.1.38                

Weknow Json Extensions

Prepare Build & Deploy NuGet
NuGet

Functionality of this library includes:

YieldWhen

Enumerate over json elements.

With Path

Rely on path convention:

json.YieldWhen(/path convention/);

{
  "friends": [
    {
      "name": "Yaron",    
      "id": 1
    },
    {
      "name": "Aviad",   
      "id": 2
    }
  ]
}
  • "friends.[].name" or "friends.*.name" will result with ["Yaron", "Aviad"]
  • "friends.[0].name" or "friends.*.name" will result with ["Yaron"]
  • "friends.[0].*" or "friends.*.name" will result with ["Yaron",1]

See: YieldWhen_Path_Test

With Filter

using static System.Text.Json.TraverseFlowInstruction;

var items = source.YieldWhen((json, deep, breadcrumbs) =>
{
    string last = breadcrumbs[^1];
    if(deep == 0 && last == "skills")
        return Drill;

    return deep switch
    {
        < 3 => Drill,
        _ => Do(TraverseFlow.SkipToParent),
    };
});

Filter

Filter operation, clean up the element according to a filter.
It excludes whatever doesn't match the filter

{
  "A": 10,
  "B": [
    { "Val": 40 },
    { "Val": 20 },
    { "Factor": 20 }
  ],
  "C": [0, 25, 50, 100 ],
  "Note": "Re-shape json"
}

Filter:

JsonElement source = ..;
var target = source.Filter((e, _, _) =>
            e.ValueKind != JsonValueKind.Number || e.GetInt32() > 30 
            ? TraverseFlowWrite.Drill 
            : TraverseFlowWrite.Skip);

Will result in:

{
  "B": [ { "Val": 40 }],
  "C": [ 50, 100 ],
  "Note": "Re-shape json"
}

Path based Filter:

var target = source.Filter("B.*.val");
// results: {"B":[{"Val":40},{"Val":20}]}
var target = source.Filter("B.[]");
// results: {"B":[{"Val":40},{"Val":20},{"Factor":20}]}
var target = source.Filter("B.[].Factor");
// results: {"B":[{"Factor":20}]}
var target = source.Filter("B.[1].val");
// results: {"B":[{"Val":20}]}

Exclude

Exclude is kind of opposite of Filter. It instruct which elements to remove.

{
  "A": 10,
  "B": [
    { "Val": 40 },
    { "Val": 20 },
    { "Factor": 20 }
  ],
  "C": [0, 25, 50, 100 ],
  "Note": "Re-shape json"
}
var target = source.Exclude("B.*.val");
// results: {"A":10,"B":[{"Factor":20}],"C":[0,25,50,100],"Note":"Re-shape json"}
var target = source.Exclude("B.[]");
// results: {"A":10,"B":[],"C":[],"Note":"Re-shape json"}
var target = source.Exclude("B.[1]");
// results: {"A":10,"B":[{"Val":40},{"Factor":20}],"C":[0,50,100],"Note":"Re-shape json"}
var target = source.Exclude("B");
// results: {"A":10,"C":[0,25,50,100],"Note":"Re-shape json"}

Serialization

ToJson

Convert .NET object into JsonElement.

var entity = new Entity(12, new BEntity("Z"));
JsonElement json = entity.ToJson();
var arr = new []{ 1, 2, 3 };
JsonElement json = arr.ToJson();

AsString

Convert JsonElement to string

JsonElement json = ...;
string compact = json.AsString();
string indented = json.AsIndentString();
string raw = json.GetRawText(); // same as json.AsIndentString();

ToStream

Convert JsonElement to stream

JsonElement json = ...;
Stream srm = json.ToStream();

ImmutableDictionary converter.

JsonStringEnumConverter EnumConvertor = new JsonStringEnumConverter(JsonNamingPolicy.CamelCase);
var options = new JsonSerializerOptions
{
    PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
    // Add the converter
    Converters = { EnumConvertor, JsonImmutableDictionaryConverter.Default }
};

var source = new Dictionary<ConsoleColor, string> 
{
    [ConsoleColor.Blue] = nameof(ConsoleColor.Blue),
    [ConsoleColor.White] = nameof(ConsoleColor.White)
};

string json = JsonSerializer.Serialize(source, options);
T deserialized = JsonSerializer.Deserialize<T>(json, options);

Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net6.0

    • No dependencies.

NuGet packages (3)

Showing the top 3 NuGet packages that depend on Weknow.Text.Json.Extensions:

Package Downloads
Weknow.EventSource.Backbone.Contracts

Package Description

Weknow.EventSource.Backbone.Channels.RedisProvider.Common

Package Description

Weknow.EventSource.Backbone.Channels.S3StoreProvider.Common

Package Description

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
5.1.50 1,282 2/16/2023
5.1.49 1,271 1/23/2023
5.1.48 262 1/22/2023
5.1.47 2,115 12/19/2022
5.1.46 887 11/15/2022
5.1.44 18,285 9/24/2022
5.1.43 14,132 4/12/2022
5.1.42 409 4/12/2022
5.1.41 431 4/12/2022
5.1.40 415 3/16/2022
5.1.39 2,023 3/16/2022
5.1.38 2,053 3/10/2022
5.1.37 6,792 3/10/2022
5.1.36 406 3/10/2022
5.1.35 2,050 3/10/2022
5.1.34 451 3/10/2022
5.1.21 13,136 3/2/2022
5.1.20 2,040 3/2/2022
5.1.18 9,967 1/17/2022
5.1.17 2,341 1/13/2022
5.1.16 5,006 1/6/2022
5.1.15 10,477 12/28/2021
5.1.14 1,093 12/28/2021
5.1.13 7,585 11/28/2021
5.1.9 1,834 11/28/2021
5.1.8 13,612 11/17/2021
5.1.7 258 11/17/2021
5.1.6 7,713 11/9/2021
5.1.5 1,932 11/8/2021
5.1.4 1,195 11/8/2021
5.1.3 315 11/8/2021
5.1.2 298 11/8/2021
5.1.1 1,114 11/8/2021
5.0.14 1,154 11/7/2021
5.0.13 350 11/3/2021
5.0.12 1,943 11/3/2021
5.0.11 673 8/9/2021
5.0.10 301 8/9/2021
5.0.9 327 8/9/2021
5.0.8 37,044 3/24/2021
5.0.7 362 3/9/2021
1.0.7 587 9/3/2020
1.0.6 436 9/3/2020
1.0.5 600 8/2/2020
1.0.4 490 8/2/2020
1.0.3 549 6/17/2020