【问题标题】:Serialize object to ampersand separated name and value将对象序列化为 & 分隔的名称和值
【发布时间】:2019-03-10 18:46:11
【问题描述】:

拥有这些数据:

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";

我该怎么做?

【问题讨论】:

标签: c# .net


【解决方案1】:

您可以尝试使用 linq 与 relation 来获取属性信息和值。

我会写一个扩展方法。

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);
    }
}

那么就可以这样使用了。

User u = new User() { Name = "test", SurrName = "aa" };
Book b = new Book() { Id = 134, Title = "aass" };
Console.WriteLine( u.ToRequestContent());
Console.WriteLine( b.ToRequestContent());

c# online

结果

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

【讨论】:

    【解决方案2】:

    为什么不只是:

    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;
        }
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多