2017-08-02 84 views
0

我看了其他几个问题如this但我的问题是不兼容的。C# - JsonConvert.SerializeObject返回空JSON字符串

我有一个List<LatLng>fireHazardsList,我想转换成JSON字符串。 A LatLng对象有一个float latitude, longitude。我正在尝试使用JsonConvert.SerializeObject将我的List转换为JSON string,但当此代码运行时,我的JSON为空。

LatLng是Xamarin Android.Gms.Maps.Model;

fireHazardsList = new List<LatLng>(); 
populateHazardList(); 
string coordinates = JsonConvert.SerializeObject(fireHazardsList, Formatting.Indented); 

我肯定缺少一个步骤,找到了class,但我是新来的JSON和不确定,我错过了什么。目前,我正在返回我JSON字符串是这样的:

[{},{},{}] 

这里是在我的名单正在填充SerializeObject()函数被调用之前的屏幕截图。

enter image description here

+0

可以添加'LatLng'类 –

+0

的类属性是什么populateHazardList后fireHazardsList.Any()的返回?如果属实,则需要为LatLng提供代码。 – Mick

+0

你可以添加json字符串和'LatLng'类的属性吗? –

回答

2

最有可能的LatLng类没有get;set;性能,这就是为什么JSON渲染是空的。

尝试使用此方法动态创建的属性:

string coordinates = JsonConvert.SerializeObject(
    fireHazardsList.Select(ll => new { ll.latitude, ll.longitude }), 
    Formatting.Indented); 
+0

谢谢,我会试试这个 –

-1

下面的代码和平正常工作对我来说: -

List<LatLng> l = new List<LatLng>() ; 
     l.Add(new LatLng { latitude=0.090f, longitude=90.8f}); 
     string s = JsonConvert.SerializeObject(l); 

下面是我的经纬度类

​​
0

您的问题是在某处populateHazardList();这并不是像你期望的那样填充数据。您看到这一点的事实:

[{},{},{}] 

...显示序列化正确发生,但没有数据。你需要弄清楚为什么。

+0

谢谢克里斯,我已经更新了我的答案,表明我的列表绝对是人口稠密 –

0

先建立正确的JSON你需要准备相应的模型:

[DataContract] 
    public class LatLang 
    { 
    [DataMember(Name = "lat")] 
     public string Latitude { get; set; } 

     [DataMember(Name = "longi")] 
     public string Longitude { get; set; } 
    } 

为了能够使用数据的属性,你需要选择一些其他的JSON序列。例如DataContractJsonSerializer或Json.NET。

LatLang latlangObj = new LatLang 
{ 
    Latitude = "something", 
    Longitude = "something" 
}; 


string jsonString = JsonConvert.SerializeObject(
new 
{ 
    jsonString = latlangObj 
}); 

所以jsonString变量将是:

{ 
"jsonString ": { 
"lat": "something", 
"longi": "someting" 
} 
}