Open
Description
Background and motivation
I propose to add the "Multipart/form-data" serializer; this is just an example to make it clear what I am suggesting.
API Proposal
using System;
using System.Collections.Concurrent;
using System.Reflection;
using var client = new HttpClient();
//var form = new MultipartFormDataContent();
var obj = new MultipartContentSerialization();
var multiForm = obj.Serialization(new Info() { FirstName = "12345", LastName = "12345", Hash = "hash" });
client.PostAsync("https://google.com/test", multiForm).GetAwaiter().GetResult();
class MultipartContentSerialization
{
public MultipartFormDataContent Serialization<T>(T obj)
{
var form = new MultipartFormDataContent();
var property = obj.GetType()
.GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (var item in property)
{
object propertyObj = item.GetValue(obj);
var result = item.GetCustomAttribute<NamePropertyMultiformAttribute>();
if (propertyObj is string res)
{
if (result is null)
form.Add(new StringContent(res), item.Name);
else
form.Add(new StringContent(res), result.Name);
}
else
{
throw new Exception("This type is not support");
}
}
return form;
}
}
class NamePropertyMultiformAttribute(string name) : Attribute
{
public string Name => name;
}
class Info
{
public required string FirstName { set; get; }
public required string LastName { set; get; }
[NamePropertyMultiformAttribute("User Id")]
public required string Hash { set; get; }
}
API Usage
Alternative Designs
No response
Risks
No response