C# 如何在机器人的复杂对象中存储用户数据
我试图在机器人的UserData中存储一个对象 首先,我有以下课程:C# 如何在机器人的复杂对象中存储用户数据,c#,bots,botframework,azure-language-understanding,C#,Bots,Botframework,Azure Language Understanding,我试图在机器人的UserData中存储一个对象 首先,我有以下课程: public class PersonalData { public string Name { get; set; } public int Age { get; set; } } 在我的Luis类中,我需要PersonalData类型的变量 public class Luis : LuisDialog<object> { PersonalData personalData; 它
public class PersonalData
{
public string Name { get; set; }
public int Age { get; set; }
}
在我的Luis类中,我需要PersonalData类型的变量
public class Luis : LuisDialog<object>
{
PersonalData personalData;
它将成功创建。
但是当我想给我的对象赋值时
if (!context.UserData.TryGetValue(ContextConstants.personalData, out personalData))
{
personalData.Name = userName;
context.UserData.SetValue(ContextConstants.personalData, personalData.Name);
}
只要程序尝试将personalData.Name设置为userName,我就会得到一个NullReferenceException,并且我的personalData对象为null。
我仔细检查了用户名是否为空
我错过了什么
提前谢谢 如果您使用的是UserData,为什么需要在对话框中设置一个变量
如果您想要有一个变量,您的PersonalData必须是可序列化的,因此您需要将[serializable]属性添加到类中
但是,与在对话框中保存变量不同,您应该始终访问将保存在UserData包中的PersonalData对象
现在,当您设置值时,不是保存整个对象,而是保存名称,因此当您从UserData包检索个人数据时,您是在检索名称,而不是对象,这就是为什么您会得到NullReferenceException,因为personalData.name不存在
我认为守则应该是:
if (!context.UserData.TryGetValue(ContextConstants.personalData, out personalData))
{
personalData.Name = userName;
context.UserData.SetValue(ContextConstants.personalData, personalData);
}
要了解有关状态的更多信息,还可以查看示例。如果您使用的是UserData,为什么需要在对话框中使用变量
如果您想要有一个变量,您的PersonalData必须是可序列化的,因此您需要将[serializable]属性添加到类中
但是,与在对话框中保存变量不同,您应该始终访问将保存在UserData包中的PersonalData对象
现在,当您设置值时,不是保存整个对象,而是保存名称,因此当您从UserData包检索个人数据时,您是在检索名称,而不是对象,这就是为什么您会得到NullReferenceException,因为personalData.name不存在
我认为守则应该是:
if (!context.UserData.TryGetValue(ContextConstants.personalData, out personalData))
{
personalData.Name = userName;
context.UserData.SetValue(ContextConstants.personalData, personalData);
}
要了解更多关于状态的信息,您还可以查看示例。我必须在IF语句之后初始化PersonalData对象,如下所示:PersonalData=new PersonalData;我发现,如果函数TryGetValue失败,out值就会设置为null。这就是为什么必须首先初始化对象变量,然后设置任何值;我发现,如果函数TryGetValue失败,out值就会设置为null。这就是为什么必须首先初始化对象变量,然后设置任何值。