QueryStringGenerator by Tomi Parviainen
Nuget / site data
Details
Info
Name: QueryStringGenerator
Package Description
Author: Tomi Parviainen
NuGet: https://www.nuget.org/packages/QueryStringGenerator/
You can find more details at https://github.com/tparviainen/query-string-generator
Source : https://github.com/tparviainen/query-string-generator
Original Readme
Query String Generator
C# incremental generator to create a method that returns the query string of the object.
Usage
1. Install the NuGet package
PM> Install-Package QueryStringGenerator
2. Update the Model(s)
Class must be decorated with QueryString
attribute, which is declared in QueryStringGenerator
namespace.
using QueryStringGenerator;
[QueryString]
public class Model
{
public int? Limit { get; set; }
public int? Offset { get; set; }
public string? Sort { get; set; }
}
3. Call ToQueryString
Method to the Instance of the Class
By default the generated method name is ToQueryString
, which when called returns the query string of the object.
var model = new Model
{
Limit = 10,
Sort = "Price"
};
Console.WriteLine($"Query string: {model.ToQueryString()}");
/*
This code example produces the following results:
Query string: &limit=10&sort=Price
*/
Generated Source Code
Below is the auto-generated extension method for the class defined in step 2. above.
// <auto-generated />
namespace QueryStringGenerator.App.Models
{
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("QueryStringGenerator", "1.0.0")]
public static class QueryStringExtensionForModel
{
public static string ToQueryString(this Model _this)
{
if (_this == null)
{
return string.Empty;
}
var sb = new global::System.Text.StringBuilder();
if (_this.Limit != null)
{
sb.Append($"&limit={_this.Limit}");
}
if (_this.Offset != null)
{
sb.Append($"&offset={_this.Offset}");
}
if (_this.Sort != null)
{
sb.Append($"&sort={System.Net.WebUtility.UrlEncode(_this.Sort)}");
}
return sb.ToString();
}
}
}
Supported Data Types
- Nullable value types, including enums
- Reference types
NOTE: The query string value for enum is the name of the enum starting with a lowercase character.
About
Generate from string properties of a class a query string for a URL.
How to use
Example ( source csproj, source files )
- CSharp Project
- Program.cs
- Person.cs
This is the CSharp Project that references QueryStringGenerator
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="QueryStringGenerator" Version="1.1.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
<PropertyGroup>
<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
<CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\GX</CompilerGeneratedFilesOutputPath>
</PropertyGroup>
</Project>
This is the use of QueryStringGenerator in Program.cs
using DemoQuery;
Person p = new();
p.FirstName = "Andrei";
p.LastName = "Ignat";
p.Age = 55;
Console.WriteLine(p.ToQueryString());
This is the use of QueryStringGenerator in Person.cs
using QueryStringGenerator;
namespace DemoQuery;
[QueryString]
internal class Person
{
public string FirstName { get; set; }=string.Empty;
public int Age { get; set; }
public string LastName { get; set; } = string.Empty;
}
Generated Files
Those are taken from $(BaseIntermediateOutputPath)\GX
- Person.g.cs
- QueryStringAttribute.g.cs
// <auto-generated />
namespace DemoQuery
{
[System.CodeDom.Compiler.GeneratedCodeAttribute("QueryStringGenerator", "1.0.0")]
internal static class QueryStringExtensionForPerson
{
public static string ToQueryString(this Person _this)
{
if (_this == null)
{
return string.Empty;
}
var sb = new System.Text.StringBuilder();
if (_this.FirstName != null)
{
sb.Append($"&firstname={System.Net.WebUtility.UrlEncode(_this.FirstName)}");
}
if (_this.LastName != null)
{
sb.Append($"&lastname={System.Net.WebUtility.UrlEncode(_this.LastName)}");
}
return sb.ToString();
}
}
}
// <auto-generated />
namespace QueryStringGenerator
{
[System.CodeDom.Compiler.GeneratedCodeAttribute("QueryStringGenerator", "1.0.0")]
internal class QueryStringAttribute : System.Attribute
{
public string MethodName { get; set; }
public QueryStringAttribute(string methodName = "ToQueryString")
{
MethodName = methodName;
}
}
}
Usefull
Download Example (.NET C# )
Share QueryStringGenerator
https://ignatandrei.github.io/RSCG_Examples/v2/docs/QueryStringGenerator