Hvordan du oppbevarer Userdata i komplekse objekt i et Bot

stemmer
1

Jeg prøver å lagre et objekt i Userdata av et Bot.

Først av alt har jeg følgende klasse:

public class PersonalData 
{
    public string Name { get; set; }
    public int Age { get; set; } 
}

I min Luis klasse trenger jeg en variabel av typen PersonalData.

public class Luis : LuisDialog<object> 
{
    PersonalData personalData;

Dette fører allerede til problemet at debugger aldri går inn i noen av mine hensikter. Hva er galt med det?

Nå, hvis jeg oppretter et objekt av PersonalData i en intensjonsavtale som dette:

PersonalData personalData = new PersonalData();

det vil bli opprettet. Men når jeg ønsker å tilordne en verdi til min objekt

if (!context.UserData.TryGetValue(ContextConstants.personalData, out personalData)) 
{
        personalData.Name = userName;
        context.UserData.SetValue(ContextConstants.personalData, personalData.Name);
}

Så snart programmet prøver å stille personalData.Nametil userNamejeg får en NullReferenceExceptionog min PersonalDataobjekt er null. Jeg har dobbelt sjekket at brukernavnet er ikke tom.

Hva er det jeg mangler?

Takk på forhånd!

Publisert på 13/01/2017 klokken 16:00
kilden bruker
På andre språk...                            


1 svar

stemmer
4

Hvis du bruker UserData, hvorfor du må ha en variabel i dialog ditt?

Hvis du vil ha en variabel, din PersonalDatamå være serializable, så du må legge til [Serializable]attributtet til klassen.

Men i stedet for å lagre en variabel i dialogen, bør du alltid tilgang til PersonalDataobjektet du vil spare i UserDataposen.

Nå, når du setter verdien, i stedet for å redde hele objektet, du bare lagrer navn, så når du henter de personlige data fra UserDataposen, er du hente navnet, ikke objektet, det er derfor du får en NullReferenceException, fordi personalData.Nameikke eksisterer.

Jeg tror koden skal være:

if (!context.UserData.TryGetValue(ContextConstants.personalData, out personalData)) 
{
        personalData.Name = userName;
        context.UserData.SetValue(ContextConstants.personalData, personalData);
}

Hvis du vil vite mer om tilstanden, kan du også se denne prøven.

Svarte 13/01/2017 kl. 16:09
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more