C# 在MVVM Windows Phone 8中反序列化JSON数据

C# 在MVVM Windows Phone 8中反序列化JSON数据,c#,json,mvvm,windows-phone-8,C#,Json,Mvvm,Windows Phone 8,我想在我的WindowsPhone8应用程序中使用Json.net反序列化数据,但我没有主意了。我以前做过这项工作,但现在数据(json)已经更改,因此代码也必须更改 我用它来下载我的数据: var grad = IsolatedStorageSettings.ApplicationSettings["grad"] as string; UriBuilder fullUri = new UriBuilder("http://openweathermap.org/data

我想在我的WindowsPhone8应用程序中使用Json.net反序列化数据,但我没有主意了。我以前做过这项工作,但现在数据(json)已经更改,因此代码也必须更改

我用它来下载我的数据:

var grad = IsolatedStorageSettings.ApplicationSettings["grad"] as string;

            UriBuilder fullUri = new UriBuilder("http://openweathermap.org/data/2.5/weather?");

            fullUri.Query = "q=" + grad + "&units=metric";

            WebClient client = new WebClient();
            client.DownloadStringAsync(fullUri.Uri);
            client.DownloadStringCompleted += client_DownloadStringCompletedtrenutno;
这是在my MainViewModel.cs的Methodos中设置的。下载之后,我有一个事件处理程序

void client_DownloadStringCompletedtrenutno(object sender, DownloadStringCompletedEventArgs e)
    {
        if (e.Error == null)
        {
            RootObject4 json = JsonConvert.DeserializeObject<RootObject4>(e.Result);
            Trenutno = new ObservableCollection<Main4>(json.main4);
            Sada = Trenutno[0];

        }
        else
        {
            //display an error
        }
    }

observedcollection
IEnumerable
作为输入。但是
json.main4
main4
类型的字段


在客户端内\u下载StringCompletedTrenutNo方法:

Trenutno = json.main4;
并在代码中更新属性:

private Main4 _trenutno;
public Main4 Trenutno
{
    get
    {
        return _trenutno;
    }

    set
    {
        if (_trenutno == value)
        {
            return;
        }

        RaisePropertyChanging(TrenutnoPropertyName);
        _trenutno = value;
        RaisePropertyChanged(TrenutnoPropertyName);
    }
}

我现在添加了一些代码,如何使用可观察的集合来获取数据,如何修改它以使其立即工作?已更新。但我建议你花点时间去理解:为什么你不需要一个可观察的集合呢?不,我不需要一个可观察的集合,但除此之外怎么做呢?:)我应该用什么来代替?我对所有更好的东西都持开放态度。更好的是只使用类本身。现在它可以工作了:)非常感谢。我有一个小问题,如果我想从Sys4、Weather4等收集数据,我应该使用相同的方法吗?!像你给我展示的那样做一个财产,然后用同样的方法?
Trenutno = json.main4;
private Main4 _trenutno;
public Main4 Trenutno
{
    get
    {
        return _trenutno;
    }

    set
    {
        if (_trenutno == value)
        {
            return;
        }

        RaisePropertyChanging(TrenutnoPropertyName);
        _trenutno = value;
        RaisePropertyChanged(TrenutnoPropertyName);
    }
}