json C# 7 Tuple Support

Viewed 4304

I want to get my C#7 tuple property names in my JSON (Newtonsoft.Json) output. My problem is: When I want to convert my tuple to JSON format that not support my parameters names.

For example this is my "Test2" method and you can see the JSON output:

public void Test2()
{
    var data = GetMe2("ok");
    var jsondata = JsonConvert.SerializeObject(data);//JSON output is {"Item1":5,"Item2":"ok ali"}
}

public (int MyValue, string Name) GetMe2(string name)
{
    return (5, name + " ali");
}

The JSON output is "{"Item1":5,"Item2":"ok ali"}" but i want "{"MyValue":5,"Name":"ok ali"}";

This is not impossible because I can get property names in runtime:

foreach (var item in this.GetType().GetMethods())
{
    dynamic attribs = item.ReturnTypeCustomAttributes;
    if (attribs.CustomAttributes != null && attribs.CustomAttributes.Count > 0)
    {
        foreach (var at in attribs.CustomAttributes)
        {
            if (at is System.Reflection.CustomAttributeData)
            {
                var ng = ((System.Reflection.CustomAttributeData)at).ConstructorArguments;
                foreach (var ca in ng)
                {
                    foreach (var val in (IEnumerable<System.Reflection.CustomAttributeTypedArgument>)ca.Value)
                    {
                        var PropertyNameName = val.Value;
                        Console.WriteLine(PropertyNameName);//here is property names of C#7 tuple
                    }
                }
            }
        }
        dynamic data = attribs.CustomAttributes[0];
        var data2 = data.ConstructorArguments;
    }

}
2 Answers
Related