2015-03-22 2 views
1

Я работаю над приложением wpf. В этом приложении я получил ответ JSON от сервера и десериализации его следующим образом: -Доступ к общедоступному классу из другого класса в wpf

StreamReader streamReader = new StreamReader(jsonResponse.GetResponseStream()); 
       String responseData = streamReader.ReadToEnd(); 
       var myData = JsonConvert.DeserializeObject<List<RootObject>>(responseData); 
       //UserData ud = new UserData(); 
       foreach (var val in myData) 
       { 
        string res = val.response; 
        if (res == "true") 
        { 
         this.Hide(); 
         new lobby().Show(); 

        } 
       } 

Мой класс выглядит следующим образом: -

public class RootObject 
{ 
    public string response { get; set; } 
    public string user_id { get; set; } 
    public string username { get; set; } 
    public string current_balance { get; set; } 
    public string message { get; set; } 
    public string oauth_token { get; set; } 
    public List<string> lastFiveSpinNumbers { get; set; } 

} 

Когда я выполняю этот код все нормально, и после проверки ответа lobby.xaml открытый. Теперь мне нужно получить доступ к значениям RootObject класса в lobby.xaml.cs. Таким образом, я создал экземпляр этого класса следующим образом: -

RootObject cd = new RootObject(); 
UserNameTextBlock.Text = cd.response; 

но cd.response всегда нуль. В чем причина?

+1

Это будет null, так как вы создаете экземпляр. просто передайте объект в конструкторе и назначьте значение – Sajeetharan

+0

@Sajeetharan: Спасибо, сэр. Это работает. –

ответ

1

Вы создаете новый экземпляр RootObject и по умолчанию response - null.

Вы можете дать ваш lobby класс конструктор, который принимает в RootObject:

public class lobby 
{ 
    public lobby(RootObject rootObject) 
    { 
     UserNameTextBlock.Text = rootObject.response; 
    } 
} 

Тогда в вашем foreach вы могли бы сделать:

if (res == "true") 
{ 
    this.Hide(); 
    new lobby(val).Show(); // Pass the root object to the Lobby constructor 
} 

Примечание: Вы можете переименовать lobby в Lobby для вашего имени класса, это соответствует лучшим соглашениям об именах C#.

Смежные вопросы