如何在asp.net 2008中使用json php数组结构

时间:2014-12-31 15:33:11

标签: asp.net json vb.net

我如何在dotnet 3.5中json序列化这个数组结构?

<?php

$response = array(
    'file_version' => 2,
    'files' => 
        array(
            array(
                'file_name' => 'test1.exe',
                'url' => 'http://127.0.0.1/heartkey/files/test1.exe',
                'path' => 'images\filename\\'
            ),
            array(
                'file_name' => 'test2.exe',
                'url' => 'http://127.0.0.1/heartkey/files/test2.exe',
                'path' => 'images\filename\\'
            ),
            array(
                'file_name' => 'test3.exe',
                'url' => 'http://127.0.0.1/heartkey/files/test3.exe',
                'path' => 'images\filename\\'
            )
        ),
    'files_max_size' => 3000
);

$json =  json_encode( $response );

echo $json;

我找到了基本方法,但我不知道如何在vb中表示, 我尝试使用数组并嵌套字典,但没有运气。 我在vb.net中的知识是基本的。

这就是我所拥有的:

Imports System.Web.Script.Serialization

Partial Class _Default
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
        Dim info As Dictionary(Of String, Dictionary(Of String, String))

        'info.Add("files", New Dictionary(Of String, String))

        Dim serializer As New JavaScriptSerializer()
        Dim serializedResult = serializer.Serialize(info)

        Response.Write(serializedResult)
    End Sub
End Class

1 个答案:

答案 0 :(得分:0)

网络表单(.aspx)不是生成JSON的绝佳技术,例如供浏览器AJAX调用使用,因为它有一个繁重的页面生命周期,并且往往会继承大量的环境开销(母版页,标题等),这些开销需要从响应中删除。

REST / JSON类型服务的首选现代技术是Microsoft WebAPI,但不幸的是,这不能用于.Net 3.5,只有4.0及更高版本。

您可以做的是创建.ASMX Web服务并使用WebMethods公开您的Json-Serialized字符串:

<System.Web.Script.Services.ScriptService()> _
Public Class WebService1
    Inherits System.Web.Services.WebService

    <System.Web.Services.WebMethod()> _
    <ScriptMethod(ResponseFormat:=ResponseFormat.Json)> _
    Public Function RenderJson() As Object
        Dim theObjects() = {
            New With {
                .file_name = "test1.exe",
                .url = "http://127.0.0.1/heartkey/files/test1.exe",
                .path = "images\filename\\"
                },
            New With {
                .file_name = "test2.exe",
                .url = "http://127.0.0.1/anotherUrl",
                .path = "images\foo"
                }
            }
        Return theObjects
    End Function

我在这里使用过匿名类,但您也可以使用强名称类来保存数据。 (我不认为我的javascript对象的形状非常正确,但你明白了。)

修改 - 错误地返回字符串:( 我已经粘贴了一个完整的工作示例,包括GitHub gist

上的客户端Ajax调用