数据合约如何运作? - 反序列化Json

2024-02-20

我举了一个例子这个问题 https://stackoverflow.com/questions/4115037/problem-with-deserializing-json-on-datamember-type/4119681#4119681,并构建了我自己的自定义 Google Maps 对象,用于反序列化 json 对象。

现在代码工作起来就像冠军一样,但我只需要解释它为什么/如何工作。序列化程序是否“尝试”匹配名称,或者发生了其他情况。

这到底是在做什么?

这是working code.

Imports System.Net
Imports System.Web
Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Json
Imports System.Web.Script.Serialization

Namespace Utilities.Apis
    Public NotInheritable Class GoogleGeolocate


        Private Const googleUrl As String = "http://maps.googleapis.com/maps/api/geocode/json?address={0}&sensor=false"
        Private Sub New()
        End Sub

        Public Shared Function GetLatLon(ByVal address As String) As String
            ''# This is just here to prevent "placeholder" data from being submitted.
            If address = "6789 university drive" Then
                Return Nothing
            End If

            address = HttpUtility.UrlEncode(address)

            Dim url = String.Format(googleUrl, address)

            Dim request = DirectCast(HttpWebRequest.Create(url), HttpWebRequest)
            request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate")
            request.AutomaticDecompression = DecompressionMethods.GZip Or DecompressionMethods.Deflate
            Dim serializer As New DataContractJsonSerializer(GetType(GoogleResponse))
            Dim res = DirectCast(serializer.ReadObject(request.GetResponse().GetResponseStream()), GoogleResponse)

            Dim resources As GoogleResponse.Result = res.results(0)
            Dim point = resources.geometry.location.lat
            Dim latlon As New GeolocationLatLon
            With latlon
                .latitude = resources.geometry.location.lat
                .longitude = resources.geometry.location.lng
            End With

            Dim jsonSerializer = New JavaScriptSerializer

            Return jsonSerializer.Serialize(latlon)
        End Function
    End Class

    <DataContract()>
    Public Class GoogleResponse
        <DataMember()>
        Public Property results() As Result()
        <DataContract()>
        Public Class Result
            <DataMember()>
            Public Property geometry As m_Geometry
            <DataContract()>
            Public Class m_Geometry
                <DataMember()>
                Public Property location As m_location
                <DataContract()>
                Public Class m_location
                    <DataMember()>
                    Public Property lat As String
                    <DataMember()>
                    Public Property lng As String
                End Class
            End Class
        End Class

    End Class
End Namespace

这是 GeolocationLatLon Poco

Public Class GeolocationLatLon
    Public latitude As String
    Public longitude As String
End Class

当我调用代码时,确实非常简单。
请注意,这是一个 MVC 控制器,除了显示我在做什么之外,与问题“真正”无关

    Function GeoLocation(ByVal address As String) As ContentResult
        Return New ContentResult With {.Content = GoogleGeolocate.GetLatLon(address),
                                       .ContentType = "application/json"}
    End Function

最终结果是

{“纬度”:“50.124300”,“经度”:“-114.4979990”}


在内部,DataContractJsonSerializer 将 JSON 名称/值对映射到 XML 信息集。事实上,DataContractJsonSerializer 构建在基于 XML 的 DataContractSerializer 之上,并像处理 XML 一样处理每个 JSON 输入和 JSON 输出。有一个更高级别的抽象层(一个 JSON 写入器和一个 JSON 读取器,通过 JsonReaderWriterFactory 公开),它实际上将此 XML 转换为 JSON,然后将 JSON 转换回内部 XML。

看到这个出色的概述(JSON 和 XML 之间的映射) http://msdn.microsoft.com/en-us/library/bb924435.aspx看看 DataContractJsonSerializer 内部发生了什么以及它如何实现这一切。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据合约如何运作? - 反序列化Json 的相关文章

  • 从 php 到 JavaScript 的数组

    我正在尝试使用 json 将数组列表从 php 传输到 javascript 但它不起作用 JS ajax url getProfilePhotos php type post post or get method data if you
  • 使用 Tempdata 使我的应用程序崩溃

    我对 ASP NET 非常陌生 正在尝试在我在 Visual Studio 2015 中制作的 Web 应用程序中的两个控制器之间传递对象 该 Web 应用程序正在使用 ASP Net 5 预览模板 Web 应用程序 如果有帮助 我想我正在
  • json_encode 返回 NULL?

    由于某种原因 项目 描述 返回NULL使用以下代码 这是我的数据库的架构 CREATE TABLE staff id int 11 NOT NULL AUTO INCREMENT name longtext COLL
  • 计算 XML 中特定 XML 节点的数量

    请参阅此 XML
  • 有没有办法在 ASP.net 中制作像 gmail 那样的进度条?

    有没有办法在 ASP net 中制作像 gmail 那样的进度条 以下是一些基于 ASP NET 的进度栏控件 ASP NET AJAX 进度条控件 http mattberseth com blog 2008 05 aspnet ajax
  • Jackson 将单个项目反序列化到列表中

    我正在尝试使用一项服务 该服务为我提供了一个带有数组字段的实体 id 23233 items name item 1 name item 2 但是 当数组包含单个项目时 将返回该项目本身 而不是包含一个元素的数组 id 43567 item
  • Log4net不会将日志写入日志文件

    我使用 Log4net 创建了一个简单的场景 但我的日志附加程序似乎不起作用 因为消息没有添加到日志文件中 我将以下内容添加到 web config 文件中
  • C# asp.net中WebForm中Winform的Textbox.KeyDown的交替事件是什么?

    在 WinForms 应用程序中 我可以有一个textbox1 keydown事件 但我想在 WebForm ASP NET 中实现同样的事情 那么我该怎么做呢 我需要从数据库中检索有关此事件的数据 您可以使用 onkeydown 事件 然
  • CodeIgniter 控制器 - JSON - AJAX

    我正在尝试通过 AJAX 使用 CodeIgniter 发送表单构建 并尝试使用 JSON 获取响应 但是 我只在打开开发人员选项卡时看到响应 我什至不确定这是否实际上是响应 因为它显示了两个 json 数据 它所显示的只是加载旋转器 然后
  • 键绑定 - 鼠标中键与 Sublime Text 2

    有谁知道是否可以将鼠标中键绑定到 Sublime Text 2 中的操作 我知道可以进行一些鼠标交互 因为您可以使用后退和前进按钮 基本上 我将使用此按钮通过 sFTP 插件上传文件 这样我需要按下的按钮数量就会从 3 个减少到 1 个 目
  • ASP.net 出现错误“访问路径被拒绝”。尝试将文件上传到我的 Windows Server 2008 R2 Web 服务器时

    我有一个 ASP NET Web 应用程序 它将文件上传到 Web 服务器上的特定文件夹 本地一切工作正常 但是当我将应用程序部署到 Web 服务器时 我开始收到错误 访问路径 D Attachments myfile doc 被拒绝 我向
  • 通过标识引用对象的标准方法(例如循环引用)?

    JSON 中是否有通过身份引用对象的标准方法 例如 具有大量 可能是循环 引用的图形和其他数据结构可以被合理地序列化 加载吗 Edit 我知道做一次性解决方案很容易 列出图中所有节点的列表 然后 我想知道是否有一个标准的 通用的解决方案来解
  • 从应用程序内部监视 ASP.NET 应用程序内存

    我正在寻找一种方法让应用程序本身监视它正在使用的内存量 这样我就可以每小时左右将其记录在日志文件中 并密切关注应用程序的使用情况 它全部托管 因此我们可以对系统进行更改以查看发生了什么 因此解决方案必须来自应用程序代码内 我们将来可能会使用
  • ASP.NET 会话状态和多个工作进程

    我需要了解一些有关 ASP NET 会话状态的信息 因为它适用于 IIS 7 和 ASP net 3 5 如果应用程序配置为使用进程内会话状态 那么如果有多个工作进程 该应用程序是否可以正常工作 换句话说 工作进程是否共享会话状态 IIS
  • Html Helper“操作”未定义,Asp.NET Core 2.2

    我是 ASP NET Core MVC 的新手 我会在这个问题前说我已经阅读了其他类似的问题 但它们与我遇到的问题并不完全相同 我正在尝试实现动态左侧导航 其中每个按钮都是从我的数据库加载的 当我打电话时 Html Action NavMe
  • ASP.Net CascadingDropDown 和 EnableEventValidation="false"

    我刚刚从 AJAX 工具包中获得了 CascadingDropDown 与 SelectedIndexChanged 一起使用 以重定向到传递所选值的查询字符串的页面 我好高兴啊 但是 我只能通过向页面添加 EnableEventValid
  • 对齐 GridView 中的行值

    我需要在 asp net 3 5 中右对齐 gridview 列中的值 我怎样才能做到这一点
  • shell-out 值到 md5(加密)函数

    我正在寻找一种解决方案 我正在构建 JSON 记录 并需要在 JQ 中生成一些文本 但将此文本通过管道传输到 MD5 求和函数并将其用作键的值 echo first John last Big jq id first last md5 通过
  • App_Data 文件夹内的数据库与连接到 SQL Server 的数据库有什么区别?

    我是 NET 新手 在开始学习 ASP NET MVC2 框架时 我发现您可以在 App Data 文件夹中创建一个 mdf 文件并连接到它 或者您可以连接到 SQL Server 这些与数据库交互的方法有什么区别 一种相对于另一种的优点
  • ASP.NET C# 中的自定义控件

    我创建了一个简单的自定义控件 它仅继承自Literal控件 并且还没有任何扩展 代码为空 命名空间 CustomControls 类名 文字 System Web UI WebControls Literal 接下来我要做的就是在aspx页

随机推荐

  • 您如何与 Nabaztag 互动过? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 The Nabaztag http www nabaztag com 我订购的已经到了 我知道有一个与小动物互动的 API http
  • C# 代码生成

    我正在考虑为一个项目创建一个小型类生成器 我一直在阅读有关 CodeDOM 的内容 因此创建类的语义似乎不是问题 但我不确定如何最好地将生成集成到开发和部署过程中 我应该如何触发类的创建 我已经读到它应该是构建过程的一部分 我应该怎么做 应
  • 从 JavaScript 中的执行上下文检索值

    var value 10 var outer funct function var value 20 var inner funct function var value 30 console log value logs 30 conso
  • AWS CloudWatch 洞察图 — 读取量 IO 的增长时间比实际读取时间长得多

    介绍 我们试图 衡量 一个未在其他情况下使用的 Aurora 数据库上特定用例的使用成本 2020 年 10 月 8 日 19 18 至 19 19 之间 UTC 我们向其发出了一些有代表性的询问 这是 1 分钟 的行动 然后 第二天 我们
  • 从 JS 中的 Azure Functions 连接到 Azure SQL DB

    我正在尝试从用 nodeJS 编写的 azure 函数连接到我的 Azure SQL DB 我已经在应用程序设置中设置了连接字符串 但它仍然不起作用 我使用 ODBC 密钥进行连接设置 有人尝试过这个吗 下面是我的函数的示例代码 var C
  • ruby 的 C1 或 C2 覆盖工具 [重复]

    这个问题在这里已经有答案了 有没有什么工具可以C1 或 C2 代码覆盖率 http dev logger blogspot com 2008 06 c0 c1 and c2 coverage html对于红宝石 1 9 SimpleCov
  • 超过对象末尾的指针意味着什么?

    在 C Primer 第 2 章 变量和基本类型 中 它说 指向一个对象的指针和越过不同对象末尾的指针有可能保存相同的地址 我不是母语人士 我认为这就是为什么我对 超过对象末尾的指针 这句话有点困惑 请问有人可以告诉我这是什么意思吗 假设你
  • 网格线不显示

    我设置了以下代码来读取 graphml 文件 执行计算 特征值 然后绘制结果 这是我到目前为止的代码 import numpy as np import networkx as nx import matplotlib pyplot as
  • 更改根模块之间的共享数据[重复]

    这个问题在这里已经有答案了 我有两个模块 1st NgModule imports BrowserModule FormsModule SharedModule forRoot declarations FirstComponent boo
  • 如何将 CSS 应用到 ASP:FileUpload 控件

    我究竟如何设计这个控件的样式 我已经尝试过这个 但它不起作用
  • Javascript继承:父级的数组变量保留值

    我在这里尝试在 JavaScript 中使用继承 但发现数组值存在问题Parent由 a 继承的类Child班级 下面的代码是正常的继承 var Parent function this list var Child function Ch
  • 运行 Python 脚本 CRON 时遇到问题:导入错误:没有名为 Tweepy 的模块

    背景 我正在关注Crontab 没有运行我的 python 脚本 https stackoverflow com questions 12534135 crontab not running my python script尝试使用 CRO
  • 从脚本/命令行执行浏览器页面/javascript

    希望这不是一个愚蠢的问题 我最近对一些我很好奇的事情有了一个想法 我是 Node js 我认为与此无关 和 V8 引擎的粉丝 但我想知道是否可以在内部运行浏览器 让它执行 JS 我的意思是创建一个程序 可能使用 V8 引擎 它可以打开一个页
  • “做某事或 DIE()”在 PHP 中如何工作?

    我正在编写一个 php 应用程序来访问 MySQL 数据库 在教程中 它说了以下形式的内容 mysql connect host user pass or die could not connect PHP 如何知道函数失败 从而运行 di
  • 如何在 python 中创建自己的数据类型以便覆盖算术运算符?

    我目前正在使用 Python Numpy 处理地理 GPS 数据 喜欢它 并且我面临着计算由坐标对定义的地理点之间的距离的重复任务pn lon lat 我有一个这样使用的函数 dist geodistance p1 p2 它类似于线性代数中
  • 使用 PHP PDO 远程连接到 MySQL 数据库

    在这里我尝试使用连接到 MySQL 数据库PHP PDO使用 IP 地址从远程服务器 当将 ip 地址代替主机时 出现以下错误 Warning PDO construct php network getaddresses getaddrin
  • tkinter 包几何形状:1 列,一行有 4 个单选按钮?

    我想在一列中有四个水平按钮 整个 UI 是一列 我不知道如何使用包几何管理器来做到这一点 我已经采用垂直按钮 但必须有办法做到这一点 我是 Python 新手 所以我的代码非常简单 v IntVar Radiobutton root tex
  • 覆盖 WildFly 中的日志记录

    我使用 tomcat 并简单地覆盖默认日志系统 如何在我的 Spring 应用程序中启用 Wildfly 上的 logback 日志记录 我的 Logback xml 在 tomcat 上工作
  • java中如何改变ArrayList元素的值

    请帮助我使用下面的代码 即使更改值后我也会得到相同的输出 import java util class Test public static void main String args ArrayList
  • 数据合约如何运作? - 反序列化Json

    我举了一个例子这个问题 https stackoverflow com questions 4115037 problem with deserializing json on datamember type 4119681 4119681