Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# JsonConvert-无法将字符串值分配给字符串变量_C#_Windows Phone 7_Google Maps_Json.net_Deserialization - Fatal编程技术网

C# JsonConvert-无法将字符串值分配给字符串变量

C# JsonConvert-无法将字符串值分配给字符串变量,c#,windows-phone-7,google-maps,json.net,deserialization,C#,Windows Phone 7,Google Maps,Json.net,Deserialization,这给了我城市名称,似乎给了一个不稳定的字符串值 例如,我创建了一个方法,将字符串变量“s”的值分配给我的类name City的字符串字段。如果我在调用FindCityName()方法后尝试获取城市的内容,我会看到城市的内容没有更新 同样,同样的事情发生了,然后我调用MessageBox.Show(City)注释“Problem here>>>>>>”下的代码行,它没有显示任何新内容 有人能告诉我问题的原因吗?我建议您使用这个谷歌地图API 一旦在请求中得到JSON响应。您可以使用NEWTONS

这给了我城市名称,似乎给了一个不稳定的字符串值

例如,我创建了一个方法,将字符串变量“s”的值分配给我的类name City的字符串字段。如果我在调用FindCityName()方法后尝试获取城市的内容,我会看到城市的内容没有更新

同样,同样的事情发生了,然后我调用MessageBox.Show(City)注释“Problem here>>>>>>”下的代码行,它没有显示任何新内容


有人能告诉我问题的原因吗?

我建议您使用这个谷歌地图API

一旦在请求中得到JSON响应。您可以使用NEWTONSOFT for wp7轻松解析

deserialized.Placemark[0].AddressDetails.Country.SubAdministrativeArea.Locality.LocalityName;

你把这个问题也放在我的博客上,但我会在这里回答。首先,我觉得有点责任发布示例代码;-)

我假设包含代码的类如下所示:

WebClient wc = new WebClient();
var json = (JObject)JsonConvert.DeserializeObject(wc.DownloadString(url));

var locality= json["results"]
                .SelectMany(x => x["address_components"])
                .FirstOrDefault(t => t["types"].First().ToString() == "locality");

var name = locality!=null ? locality["long_name"].ToString() : "";
public class MyClass
{
    private void MyMethod()
    {
      FindCityName();
      MessageBox.Show(City);
    }

    private void FindCityName()
    {
      // Code omitted - see your question
    }

    private string City;
}
这个字符串没有什么不稳定的地方。您的问题是异步性。如果你仔细观察,你会发现我使用了一个observable,当DownloadStringCompleted被触发时,它会触发。事件中的代码仅在下载完成时调用,但下载是异步进行的。但是我假设您要做的是调用FindCityName方法,然后直接尝试访问结果,就像我在MyMethod中显示的那样。这就像在触发请求后直接想要结果一样。结果还没有出来!这就像一个网页下载-它需要一段时间。您可以通过回调来修复此问题,如下所示:

WebClient wc = new WebClient();
var json = (JObject)JsonConvert.DeserializeObject(wc.DownloadString(url));

var locality= json["results"]
                .SelectMany(x => x["address_components"])
                .FirstOrDefault(t => t["types"].First().ToString() == "locality");

var name = locality!=null ? locality["long_name"].ToString() : "";
public class MyClass
{
    private void MyMethod()
    {
      FindCityName();
      MessageBox.Show(City);
    }

    private void FindCityName()
    {
      // Code omitted - see your question
    }

    private string City;
}
公共类MyClass
{
私有void MyMethod()
{
FindName();
}
public void FindCityName()
{
字符串url=”http://maps.google.com/maps/geo?q=39.920794,32.853902&output=json&oe=utf8&sensor=true&key=MYKEY”;
var w=新的WebClient();
可观察。FromEvent(w,“DownloadStringCompleted”)。订阅(r=>
{
var deserialized=JsonConvert.DeserializeObject(r.EventArgs.Result);
City=反序列化。Placemark[0]。AddressDetails.Country.SubAdministrativeArea.Locality.LocalityName;
DoneDownloading();
});
w、 下载StringAsync(新Uri(url));
}
私人城市;
私有无效已完成下载
{
MessageBox.Show(城市);
}
}

这有用吗

WebClient wc没有名为DownloadString(…)的方法。我将Newtonsoft.Json添加到我的引用中……我通过在每个方法上使用断点解决了这个问题,并像您一样重新组织了方法调用。非常感谢:)@LocalJoost我看到了你的博客,它确实帮助了我。我被困在与OP相同的问题上。谢谢!对于其他正在寻找博客的人来说,它就在这里-