C# - JsonConvert.SerializeObject返回空的JSON字符串

时间:2017-08-02 05:15:22

标签: c# json json.net

我已经查看了其他几个问题,例如this,但我的问题不兼容。

我有List<LatLng>名为fireHazardsList,我想将其转换为JSON字符串。 LatLng对象有float latitude, longitude。我正在尝试使用JsonConvert.SerializeObjectList转换为JSON string,但目前我的JSON在运行此代码时为空。

LatLng是在Xamarin Android.Gms.Maps.Model;

中找到的class
fireHazardsList = new List<LatLng>();
populateHazardList();
string coordinates = JsonConvert.SerializeObject(fireHazardsList, Formatting.Indented); 

我肯定错过了一步,但我是JSON的新手并且不确定我缺少什么。目前我正在返回的JSON字符串是这样的:

[{},{},{}]

这是一个屏幕截图,显示我的列表正在调用SerializeObject()函数之前填充。

enter image description here

4 个答案:

答案 0 :(得分:2)

LatLng类很可能没有get;set;属性,这就是JSON渲染为空的原因。

尝试此操作即时创建属性:

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

答案 1 :(得分:0)

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

[{},{},{}]

...表明序列化正确发生,但没有数据。你需要找出原因。

答案 2 :(得分:0)

要首先创建正确的JSON,您需要准备适当的模型:

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

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

为了能够使用Data属性,您需要选择其他一些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"
 }
}

答案 3 :(得分:-1)

以下代码的和平正确地为我工作: -

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

以下是我的LatLng课程

public class LatLng
{
    public float latitude { get; set; }
    public float longitude { get; set; }
}