如何将对象序列化为查询字符串格式?我似乎在谷歌上找不到答案.谢谢.

以下是我将序列化的对象作为示例.

public class EditListItemActionModel
{
    public int? Id { get; set; }
    public int State { get; set; }
    public string Prefix { get; set; }
    public string Index { get; set; }
    public int? ParentID { get; set; }
}

推荐答案

我99%确定没有内置的实用方法.这不是一项非常常见的任务,因为web服务器通常不会使用URL编码的键/值字符串.

你觉得把反射和LINQ混合在一起怎么样?这是有效的:

var foo = new EditListItemActionModel() {
  Id = 1,
  State = 26,
  Prefix = "f",
  Index = "oo",
  ParentID = null
};

var properties = from p in foo.GetType().GetProperties()
                 where p.GetValue(foo, null) != null
                 select p.Name + "=" + HttpUtility.UrlEncode(p.GetValue(foo, null).ToString());

// queryString will be set to "Id=1&State=26&Prefix=f&Index=oo"                  
string queryString = String.Join("&", properties.ToArray());

更新:

要编写返回任何1-deep对象的QueryString表示形式的方法,可以执行以下操作:

public string GetQueryString(object obj) {
  var properties = from p in obj.GetType().GetProperties()
                   where p.GetValue(obj, null) != null
                   select p.Name + "=" + HttpUtility.UrlEncode(p.GetValue(obj, null).ToString());

  return String.Join("&", properties.ToArray());
}

// Usage:
string queryString = GetQueryString(foo);

您还可以将其作为一种扩展方法,而无需进行太多额外的工作

public static class ExtensionMethods {
  public static string GetQueryString(this object obj) {
    var properties = from p in obj.GetType().GetProperties()
                     where p.GetValue(obj, null) != null
                     select p.Name + "=" + HttpUtility.UrlEncode(p.GetValue(obj, null).ToString());

    return String.Join("&", properties.ToArray());
  }
}

// Usage:
string queryString = foo.GetQueryString();

Asp.net相关问答推荐

在这个 For 循环计数没有增加

如何在 MVC 中为国家和州/省创建 Select 列表

创建项目 ASP.NET Core (.NET Core) 和 ASP.NET Core (.NET Framework) 有什么区别

IIS HTTP 错误 500.19

Web API Queryable - 如何应用 AutoMapper?

asp.net 单选按钮分组

如何获取已构建、编码的 ViewState 的值?

如何使用 javascript 获取 MVC 应用程序的基本 URL

你如何确定哪个验证器失败了?

通过 jQuery 调用 ASP.NET 服务器端方法

在 Asp.net mvc5 中使用用户名而不是邮箱作为身份

在不知道键名的情况下访问 JSON 对象的元素

如何从 JS 访问 ViewBag

LINQ to Entities 无法识别 MVC 4 中的System.String ToString()方法

我的 asp.net mvc Web 应用程序中的 OutputCache 设置.防止缓存的多种语法

在asp.net控件之间动态添加

如何在 ASP.NET 中设置下拉列表项?

为什么在 MVC4 Razor 布局文件中无法识别 @Scripts 和 @Styles 命令?

在 ASP.NET 标识中添加角色

ConfigurationManager.AppSettings 缓存