Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将对象序列化为以符号分隔的名称和值_C# - Fatal编程技术网

C# 将对象序列化为以符号分隔的名称和值

C# 将对象序列化为以符号分隔的名称和值,c#,C#,拥有这些数据: class User { public string Name {get; set;} public string SurrName {get; set;} } class Book { public int Id {get; set;} public string Title {get; set;} } var user = getSampleUser(); var book = getSampleBook(); 我想创建一个字符串,它将把

拥有这些数据:

class User
{
    public string Name {get; set;}
    public string SurrName {get; set;}
}

class Book
{
    public int Id {get; set;}
    public string Title {get; set;}
}

var user = getSampleUser();
var book = getSampleBook();
我想创建一个字符串,它将把序列化对象约束为
&name=value

var userContent = user.ToRequestContent(); // "&Name=Adam&Surrname=Smith";
var bookContent = book.ToRequestContent(); // "&Id=5&Title=7";
我该怎么做呢?

为什么不:

class User
{
    public string Name {get; set;}
    public string SurrName {get; set;}
    public string ToRequestContent()
    {
         return "&Name="+Name+"&Surrname="+SurrName;
    }
}

class Book
{
    public int Id {get; set;}
    public string Title {get; set;}
    public string ToRequestContent()
    {
         return "&Id="+Id+"&Title="+Title;
    }
}
为什么不只是:

class User
{
    public string Name {get; set;}
    public string SurrName {get; set;}
    public string ToRequestContent()
    {
         return "&Name="+Name+"&Surrname="+SurrName;
    }
}

class Book
{
    public int Id {get; set;}
    public string Title {get; set;}
    public string ToRequestContent()
    {
         return "&Id="+Id+"&Title="+Title;
    }
}

您可以尝试将
linq
与reflation一起使用,以获取属性信息和值

我会写一个扩展方法

public static class ExtenstionArray
{
    public static string ToRequestContent<T>(this T model) {
        var list = model.GetType().GetProperties()
               .Select(x => new
               {
                   val = x.GetValue(model).ToString(),
                   name = x.Name
               })
               .Select(z => string.Join("=", z.name, z.val));

        return "&"+ string.Join("&", list);
    }
}

结果

&Name=test&SurrName=aa
&Id=134&Title=aass

您可以尝试将
linq
与reflation一起使用,以获取属性信息和值

我会写一个扩展方法

public static class ExtenstionArray
{
    public static string ToRequestContent<T>(this T model) {
        var list = model.GetType().GetProperties()
               .Select(x => new
               {
                   val = x.GetValue(model).ToString(),
                   name = x.Name
               })
               .Select(z => string.Join("=", z.name, z.val));

        return "&"+ string.Join("&", list);
    }
}

结果

&Name=test&SurrName=aa
&Id=134&Title=aass

可能重复的如果只有很少的属性,则可以根据需要重写ToString方法和格式化字符串。可能重复的如果只有很少的属性,则可以根据需要重写ToString方法和格式化字符串。小心-如果OP希望生成查询字符串,您需要按照中的建议对属性值进行编码-如果OP希望生成查询字符串,则需要按照中的建议对属性值进行编码