【问题标题】:Json Serialization using Web Api Controller 2 in ASP.Net MVC在 ASP.Net MVC 中使用 Web Api Controller 2 进行 Json 序列化
【发布时间】:2016-05-06 09:07:06
【问题描述】:

我正在尝试为特定位置信息(如名称、ShortText、ImageUrl 和地理坐标)序列化 json 数据。我在模型中为 json 对象创建了一个 PoiInfo.cs 类。到目前为止,Name、ShortText 和 Imageurl 序列化运行良好。但我对地理信息数据有疑问。我的 PoiInfo.cs 看起来像这样-

public class PoiInfo
 {
    public string Name { get; set; }
    public string Shorttext { get; set; }
    public GeoCoordinates GeoCoordinates { get; set; }
    public List<string> Images { get; set; }
}

public class GeoCoordinates
{
    public double Longitude { get; set; }
    public double Latitude { get; set; }
}

现在在控制器中,我尝试以这种方式进行序列化。我马上就给-

    public JsonResult<PoiInfo> Get(string id)
      {
            WebClient client = new WebClient();
            var TextResponse = //Api I used from wikipedia
            var ImageResponse = //Api I used from wikipedia
            var GeoResponse = //Api I used from wikipedia


            var TextResponseJson = JsonConvert.DeserializeObject<Rootobject>(TextResponse);
            var TextfirstKey = TextResponseJson.query.pages.First().Key;
            var TextResult = TextResponseJson.query.pages[TextfirstKey].extract;

            var ImgresponseJson = //similar as before

            var GeoResponseJson = JsonConvert.DeserializeObject<GeoRootobject>(GeoResponse);
            var firstKey = GeoResponseJson.query.pages.First().Key;
            var Latitude = GeoResponseJson.query.pages[firstKey].coordinates.First().lat;
            var Longitude = GeoResponseJson.query.pages[firstKey].coordinates.First().lon;

            var result = new PoiInfo();
            result.Shorttext = TextResult;
            result.Name = id;
            result.Images = new List<string> { ImageResult };
            result.GeoCoordinates = new List<string> {Double.Parse(Latitude+Longitude)}; // showing error double to string


            return Json(result);
    }


  }

我想通过以下方式得到我的结果-

 {
 "Name": "Burgtor",
 "Shorttext": "The Burgtor, built 1444 in late Gothic style, was the northern city gate of Hanseatic Lübeck....
 "GeoCoordinates": {
 "Longitude": 10.6912,
  "Latitude": 53.8738
  },
 "Images": [
 "8AB1DF99.jpg or //Image url"
  ]
 }

到目前为止一切正常,除了 GeoCordinates。如何更正我的代码。

【问题讨论】:

    标签: asp.net-mvc object serialization jsonserializer asp.net-apicontroller


    【解决方案1】:
    //...
    result.GeoCoordinates = new GeoCoordinates{ 
                                  Latitude = Double.Parse(Latitude), 
                                  Longitude = Double.Parse(Longitude)
                                }; 
    ///...
    

    【讨论】:

    • @JamieD77 由于 C# 3.0 构造函数括号在使用对象初始化器时是可选的。
    • 如果您在地理编码行旁边的评论是您遇到的错误,那么该错误会告诉您问题所在。您正在尝试将双精度数放入字符串列表中。您需要将双精度转换为字符串才能使其工作。
    • @serhiyb:谢谢它正在工作。我需要在纬度和经度之后添加 ToString()。
    • @JamieD77 哦,有道理。感谢您的评论。
    【解决方案2】:

    这是我修改后的答案

              result.GeoCoordinates = new GeoCoordinates
                {
                    Latitude = Latitude;
                    Longitude = Longitude
                };
    

    【讨论】:

    • 如果纬度和经度最初不是字符串,那么它们是什么类型?
    • 您是否尝试直接取消Double.Parse
    • 当我尝试使用您的代码时,它显示错误 - 'double.Parse(string)' 的最佳重载方法匹配有一些无效参数和另一个错误参数 1:无法从 'double' 转换为'细绳'。我用这个api来获取地理信息en.wikipedia.org/w/…
    • 如果 Latitude 已经是一个 double,那么你不需要首先解析它。你是否尝试在不使用 double.parse 的情况下设置 Latitude = LatitudeLongitude = Longitude
    • @JamieD77 感谢您提供的信息。如果我设置 Latitude = Latitude 和 Longitude = Longitude,它也会以这种方式工作。
    猜你喜欢
    • 2021-12-17
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 2014-04-27
    相关资源
    最近更新 更多