c# - 在 .NET 3.5 中使用 WCF DataContractJsonSerializer

标签 c# .net wcf .net-3.5 datacontractserializer

我正在尝试在我的 ASP.NET MVC 2 站点中使用此处的地理编码代码。不幸的是,其中一些代码,特别是 DataContractJsonSerializer 用法,只能通过 .NET 4.0 实现。由于我的托管服务提供商不支持 .NET 4,我不得不在 .NET 3.5 中实现该功能。

我如何修改代码(我已在下面重新发布)以在 .NET 3.5 中工作?

Google Maps Geocoding API 也可以返回 XML,如果这在 3.5 中更容易序列化...


下面是我试图从 .NET 4 转换到 .NET 3.5 的代码:

using System;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Net;
using System.Web;

.
.
.

private static GeoResponse CallGeoWS(string address)
{
        string url = string.Format(
                "http://maps.google.com/maps/api/geocode/json?address={0}&region=dk&sensor=false",
                HttpUtility.UrlEncode(address)
                );
        var request = (HttpWebRequest)HttpWebRequest.Create(url);
        request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");
        request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
        DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(GeoResponse));
        var res = (GeoResponse)serializer.ReadObject(request.GetResponse().GetResponseStream());
        return res;
}

[DataContract]
class GeoResponse
{
        [DataMember(Name="status")]
        public string Status { get; set; }
        [DataMember(Name="results")]
        public CResult[] Results { get; set; }

        [DataContract]
        public class CResult
        {
                [DataMember(Name="geometry")]
                public CGeometry Geometry { get; set; }

                [DataContract]
                public class CGeometry
                {
                        [DataMember(Name="location")]
                        public CLocation Location { get; set; }

                        [DataContract]
                        public class CLocation
                        {
                                [DataMember(Name="lat")]
                                public double Lat { get; set; }
                                [DataMember(Name = "lng")]
                                public double Lng { get; set; }
                        }
                }
        }
}

最佳答案

您遇到的具体问题是什么?

没有更多详细信息,很难诊断出确切的问题,但是 DataContractJsonSerializer 在 .NET 3.5 中可用 - 您需要手动添加对 的引用System.ServiceModel.Web.dll.

(请注意,MSDN 文档误导性地指出 DataContractJsonSerializer 可以在 System.Runtime.Serialization.dll 中找到。虽然这对于 .NET 4 是正确的,但 . NET 3.5 版本的 DataContractJsonSerializer 实际上存在于 System.ServiceModel.Web.dll 中。)

关于c# - 在 .NET 3.5 中使用 WCF DataContractJsonSerializer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3178218/

相关文章:

c# - 返回此方法的嵌套 LINQ 无法转换为存储表达式异常

c# - 这可能是 lambda 表达式吗?

c# - C# 中的存在类型?

c# - 将焦点设置到 .NET 用户控件...?

WCF 停止的 Windows 服务

c# - 使用 netTcpBinding 的 WCF 连接速度较慢

c# - C# 中的 SQL 查询不支持希伯来语

.net - 使用 ADO.net(OLEDB) 导入 UTF-8 CSV 文件

web-services - 使用 ?wsdl URI 查询将 LinqPad 连接到 WCF Web 服务

c# - Roslyn 从 IMethodSymbol 获取 MethodInfo