gpt4 book ai didi

asp.net - 如何访问存储在 session 中的动态对象

转载 作者:行者123 更新时间:2023-12-01 12:44:08 26 4
gpt4 key购买 nike

在 PHP 中,我们可以在 session 中存储/访问关联数组。我如何使用 asp.net mvc4 访问它们。

我在 session 中设置变量如下:

Session["User"] = new { UserName = "abc", Email= "a@a.com", UserType="User" };

我需要一些机制来访问像 UserName 表单 session “用户”这样的值 -

string user = Session["User"]["UserName"]

有什么想法吗?

最佳答案

在您的示例中,您放入 session 中的不是动态对象,而是匿名类的实例。然而,这是行不通的,因为为了在从 session 中读取对象时访问对象的属性,您必须将其转换为正确的类型,在本例中为匿名类。因为您不知道匿名类的名称(这就是它是匿名的原因),所以您不能执行此转换。解决这个问题的方法有以下三种:

  1. 使用命名类
  2. 使用字典
  3. 使用动态对象

1。使用命名类

这个非常简单,只需创建一个具有您需要的属性的类(或结构):

public class UserData {
public string UserName {get; set;}
public string Email {get; set;}
public string UserType {get; set;}
}

然后使用这个类的实例来存储 session 中的数据:

Session["User"] = new UserData {UserName = "abc", Email= "a@a.com", UserType="User"};

并像这样访问它:

var user = (UserData)Session["User"]; 
var userName = user.UserName;

在这种情况下,您失去了“活力”,因为您必须预先声明所有属性,但作为返回,您会得到一些编译时检查,这是一件好事。除非有充分的理由存储动态值,否则我会选择此解决方案。

2。使用字典

在这里你存储了一个 Dictionary<string, string>在 session 中:

Session["User"] = new Dictionary<string, string> {{"UserName", "abc"}, {"Email", "a@a.com"}, {"UserType", "User"} };

并访问它:

var userDict = (Dictionary<string, string>)Session["User"];
var userName = userDict["UserName"];

3。使用动态对象

这与使用字典没有太大区别,因为它不提供编译时类型检查,但提供了更好的语法。

dynamic userData = new ExpandoObject();
userData.UserName = "abc";
userData.Email = "a@a.com";
userData.UserType = "User";
Session["User"] = userData;

或者,正如@James 在评论中指出的那样,您也可以在此处使用匿名类型,就像您在原始示例中使用的那样:

Session["User"] = new {UserName="abc", Email="a@a.com", UserType="User"};

并访问它:

dynamic userData = Session["User"];
var userName = userData.UserName;

关于asp.net - 如何访问存储在 session 中的动态对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21795188/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com