C# 反序列化复杂JSON对象

C# 反序列化复杂JSON对象,c#,json,C#,Json,我正在尝试反序列化一个复杂的JSON对象,如下所示: public class StationaryOsbtacle { public float latitude { get; set; } public float longitude { get; set; } public float cylinder_radius { get; set; } public float cylinder_height { get; set; } } public clas

我正在尝试反序列化一个复杂的JSON对象,如下所示:

public class StationaryOsbtacle
{
    public float latitude { get; set; }
    public float longitude { get; set; }
    public float cylinder_radius { get; set; }
    public float cylinder_height { get; set; }
}

public class MovingObstacle
{
    public float latitude { get; set; }
    public float longitude { get; set; }
    public float altitude_msl { get; set; }
    public float sphere_radius { get; set; }
}

public class RootObjectMovingObstacle
{
    public List<StationaryOsbtacle> stationary_osbtacles { get; set; }
    public List<MovingObstacle> moving_obstacles { get; set; }
}
如何分别反序列化每个属性(纬度、经度等)

最后,我尝试通过标签查看任何变量,我使用以下代码并获得一个列表 这段代码在一个计时器中,我不知道数组的大小

        webRequest = (HttpWebRequest)WebRequest.Create("http://" + Ip.ToString() + ":" + Port.ToString() + "....."); // Create a request to get obstacles
        webRequest.Method = "GET";
        webRequest.KeepAlive = true;
        webRequest.ContentType = "application/x-www-form-urlencoded";
        webRequest.CookieContainer = cookieJar; //set container for HttpWebRequest 

        webResponse = (HttpWebResponse)webRequest.GetResponse(); // Get the response.

        using (var stream = webResponse.GetResponseStream())
        using (var reader = new StreamReader(stream))

        {
              var outObject = Newtonsoft.Json.JsonConvert.DeserializeObject<RootObjectMovingObstacle>(reader.ReadToEnd());
              my_label_latitude.Text = outObject.stationary_osbtacles.......?
        }
webRequest=(HttpWebRequest)webRequest.Create(“http://“+Ip.ToString()+”:“+Port.ToString()+”);//创建获取障碍的请求
webRequest.Method=“GET”;
webRequest.KeepAlive=true;
webRequest.ContentType=“application/x-www-form-urlencoded”;
webRequest.CookieContainer=cookieJar//为HttpWebRequest设置容器
webResponse=(HttpWebResponse)webRequest.GetResponse();//得到回应。
使用(var stream=webResponse.GetResponseStream())
使用(变量读取器=新的流读取器(流))
{
var outObject=Newtonsoft.Json.JsonConvert.DeserializeObject(reader.ReadToEnd());
my_label_latitude.Text=outObject.Stational_OSB触角。。。。。。。?
}

如何避免在标签上显示任何实变量?

使用Newtonsoft JSON引擎:

var yourClass = Newtonsoft.Json.JsonConvert
   .DeserializeObject<RootObjectMovingObstacle>(...);
var yourClass=Newtonsoft.Json.JsonConvert
.反序列化对象(…);

SO和google上有大量的示例。

您可以使用Newtonsoft json库,使用simple
dynamic
对象将任何json字符串解析为对象:

JsonReader jsonReader = new JsonTextReader(new StringReader(strJson)) { DateParseHandling = DateParseHandling.None };
dynamic jsonObj = JObject.Load(jsonReader);

反序列化对象时会出现什么错误?添加一些示例json。我想你会发现int不是lat的最佳匹配/long@Praveen,我没有收到任何错误,因为我不知道怎么做。@Ewan我添加了样本JSON,它由浮点数组成,我将对其进行更改。我的意思是一个包含真实数据的样本为什么这么复杂?直接使用
dynamic res=JsonConvert.DeserializeObject(jsonString)不是更容易吗
OP已经有了
StationaryOsbtacle
的类定义。当数据结构已知且是静态的时,反序列化为
动态
是一个非常激烈(而且肮脏)的选择。
JsonReader jsonReader = new JsonTextReader(new StringReader(strJson)) { DateParseHandling = DateParseHandling.None };
dynamic jsonObj = JObject.Load(jsonReader);