标签: javascriptserializer

使用System.Web.Script.Serialization.JavascriptSerializer反序列化JSON - 如何?

注意:我发布了一个类似的问题,这是这个问题的祖先,因为我最初考虑使用JSON.NET来解析JSON,但我正在使用内置的反序列化器,所以这是一个不同的问题.

这就是我要做的事情:例如,我有一个名为Item的类.json有许多"元素"(如果这就是它们被称为 - 它们模仿Item类),每个元素包含3个字段:一个名为id的整数,一个名为name的字符串和一个名为creationTime的日期时间.我想将所有这些Item"元素"从json解析为Item对象列表.我在Item类中创建了3个字段以匹配JSON.

这就是我目前正在做的事情:

JavaScriptSerializer ser = new JavaScriptSerializer();          
List<Item> items = ser.Deserialize<Item>(new StreamReader(response.GetResponseStream()).ReadToEnd());
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用,因为我"无法将类型'superapi.Item'隐式转换为'System.Collections.Generic.List <superapi.Item>'".因此,我不知道如何解决这个问题,因为JSON中有许多Item架构的元素.是否有可能在foreach循环中执行此操作,在JSON中查找每个反序列化的项,将其添加到列表中,并继续循环?我将尝试使用一些类似的代码来做这件事,我将发布我的结果.

谢谢!

更新:这是一些JSON的样子:

[{
    "Id": 1,
    "Name": "First item name",
    "creationTime": "\/Date(1247258293690)\/"
},
{
    "Id": 2,
    "Name": "Second item name",
    "creationTime": "\/Date(1247088323430)\/"
}]
Run Code Online (Sandbox Code Playgroud)

这是我的Item类的样子:

public class Item
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public DateTime creationTime { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

.net c# serialization json javascriptserializer

6
推荐指数
1
解决办法
2万
查看次数

无效的Json基元

你能帮我解决这个问题吗?我有一个asp.net应用程序,在此我使用Javascript序列化程序来序列化数据集,然后转换为列表.该代码如下所示.

JavaScriptSerializer json = new JavaScriptSerializer();
strJson = json.Serialize(aclDoc);
Run Code Online (Sandbox Code Playgroud)

但是,在反序列化时,我得到一个ArguementException,就像我的Json值的无效Json Primitives一样.我的json值是

[{"Id":"F79BA508-F208-4C37-9904-DBB1DEDE67DB","App_Id":"ScriptFlow","Name":"New form","FriendlyName":"","Read":"Revoke","ReadRule":"a353776f-cbdc-48b7-a15b-4a2316d19b05","Update":"Grant","UpdateRule":"be30c34e-33ec-4c0a-9f09-4fd483f5f1b9","Create":"Revoke","CreateRule":"898dce4d-4709-45b6-8942-d7efb07cbd86","Delete":"Revoke","DeleteRule":"aa14d435-dec8-4ade-ad9b-830ae5ee15d0"}][{"Id":"1","Doc_Id":"858E013C-5775-4FDF-AA1E-2C84053EE39F","Name":"TextBox1","FriendlyName":"TextBox1","Read":"Grant","ReadRule":"0a2e3c0e-ad8f-4f75-9160-cfd9827ac894","Update":"Grant","UpdateRule":"ecad3cf4-104f-44dc-b815-de039f3a0396"},{"Id":"2","Doc_Id":"858E013C-5775-4FDF-AA1E-2C84053EE39F","Name":"TextBox2","FriendlyName":"TextBox2","Read":"Grant","ReadRule":"81e0e9ef-09f7-4c25-a58e-d5fdfbd4c2ba","Update":"Grant","UpdateRule":"2047f662-c881-413b-a1f9-69f15bf667fc"}]
Run Code Online (Sandbox Code Playgroud)

反序列化的代码是:

JavaScriptSerializer json = new JavaScriptSerializer();
lstDoc = json.Deserialize<List<ACLDocument>>(value);
return lstDoc;
Run Code Online (Sandbox Code Playgroud)

其中lstDoc是我班级类型的列表集合

我得到了这样的例外:

Invalid JSON primitive:
{"Id":"1","Doc_Id":"858E013C-5775-4FDF-AA1E-2C84053EE39F","Name":"TextBox1","FriendlyName":"TextBox1","Read":"Grant","ReadRule":"0a2e3c0e-ad8f-4f75-9160-cfd9827ac894","Update":"Grant","UpdateRule":"ecad3cf4-104f-44dc-b815-de039f3a0396"},{"Id":"2","Doc_Id":"858E013C-5775-4FDF-AA1E-2C84053EE39F","Name":"TextBox2","FriendlyName":"TextBox2","Read":"Grant","ReadRule":"81e0e9ef-09f7-4c25-a58e-d5fdfbd4c2ba","Update":"Grant","UpdateRule":"2047f662-c881-413b-a1f9-69f15bf667fc"}].
Run Code Online (Sandbox Code Playgroud)

请帮我解决这个问题.提前致谢

c# asp.net serialization json javascriptserializer

6
推荐指数
1
解决办法
4万
查看次数

从ASMX Web服务返回JSON,没有XML包装器?

我需要从C#Web服务获取Json数据.

我知道基于此有几个问题,请相信我,我已阅读了不少内容,但只是为了让我更加困惑.

这就是我所做的:

在我的网络服务中,我包括:[System.Web.Script.Services.ScriptService]用于课程和[ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true)]方法

我还用a JavaScriptSerializer()来将我的数据转换为字符串

我正在使用这个服务 $.getJSON()

如果我不使用它,我会收到跨域引用错误.

为此,我不得不设置m服务来获取回调函数名称,所以我传递t his.Context.Request["callback"]+序列化的Json数据;

但是在输出中我把它包裹起来

< string xmlns="http://XYZ...">  
Run Code Online (Sandbox Code Playgroud)

标签内的数据采用我需要的格式

我还尝试使用以下方法设置内容类型 $.ajaxSetup({ scriptCharset: "utf-8" , contentType: "application/json; charset=utf-8"});

但仍然没有成功.

稍后添加:我接受了frenchie的anwser,因为我知道这是正确的方法,但我仍然不能让它工作......我只是将webservice和网站放在同一个域并使用xml,我知道这不是最好的方法,但是我花了两天时间而且不能浪费更多.

json web-services asmx javascriptserializer

6
推荐指数
1
解决办法
3万
查看次数

ASMX webservice - 返回JSON而不是XML

我有一个包含一种方法的Web服务:

[WebMethod]
public string Movies()
{
    using (var dataContext = new MovieCollectionDataContext())
    {
        var query = dataContext.Movies.Select(m =>new{m.Title,m.ReleaseDate}).Take(20);
        var serializer = new JavaScriptSerializer();
        return serializer.Serialize(query);
    }
}
Run Code Online (Sandbox Code Playgroud)

该方法正确地序列化了对象,但是当我在FireBug中查看响应时,它看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">[{"Title":"SQL","ReleaseDate":"\/Date(1224007200000)\/"},{"Title":"Termonator Salvation","ReleaseDate":"\/Date(1224007200000)\/"}]</string>
Run Code Online (Sandbox Code Playgroud)

这是我使用Kendo Data Source的jQuery方法

$(function () {
    alert("Welcome To Kendo");
    var dataSource = new kendo.data.DataSource(
                {
                    transport: {
                        read: {
                            type: "POST",
                            dataType: "json",
                            url: "/MovieService.asmx/Movies"
                           // contentType: "application/json; charset=utf-8"

                        }
                    },
                    change: function (e) {
                        alert(e);

                    },
                    error: function (e) {
                        alert(e[2]);
                    },
                    pageSize: 10,
                    schema: …
Run Code Online (Sandbox Code Playgroud)

c# json web-services asmx javascriptserializer

6
推荐指数
1
解决办法
1万
查看次数

为什么Web服务将数据作为msg.d返回

我发现我的webmethod正在返回数据

{ "d":
 [
   {"id":"1","itemtxt":"Masters"},
   {"id":"2","itemtxt":"Transactions"},
   {"id":"3","itemtxt":"Misch. Reports"}
 ]
}
Run Code Online (Sandbox Code Playgroud)

如果您注意到,该数组被命名为" d ".这是为什么 ?它有什么规则吗?

为了您的信息,我将返回一个对象列表(List<webitem>)

public class webitem
{
    public webitem(string kid, string kval)
    {
        this.id = kid;
        this.itemtxt = kval;
    }

    public string id { get; set;  }
    public string itemtxt { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这个" d "是什么意思?对于我从网络方法发送的任何数据,它总是相同吗?或者它会根据我的数据类型/类类型而改变?

编辑

这是web方法

[WebMethod]
public  List<webitem> GetSubModules(string key)
{
    string s = " order by smid";
    if (key != null)
        s = " where moduleid=" + key + s; …
Run Code Online (Sandbox Code Playgroud)

asp.net jquery json web-services javascriptserializer

6
推荐指数
1
解决办法
1890
查看次数

使用JSON反序列化方法时VS 2013崩溃

我创建了一个C#ASP.NET方法,它只需要在同一个类中包含一个包含JSON的字符串属性.我的问题是每当我键入.Deserialize方法(注释行)时,Visual Studio 2013在事件日志中崩溃并出现"未处理的异常".

public object JSONAsObject()
{
    object obj = new object();
    JavaScriptSerializer js = new JavaScriptSerializer();
    // obj = js.Deserialize<object>(this._json);
    return obj;
}
Run Code Online (Sandbox Code Playgroud)

如果我在评论中写下这一行(如上所述)然后删除评论没有问题,所以问题似乎是Intellisense或我编写代码的方式 - 任何人都有任何想法?

崩溃日志

Application: devenv.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.ArgumentNullException
Stack:
   at System.Text.RegularExpressions.Regex.Escape(System.String)
   at Microsoft.OneCode.Utilities.UserControl.CodeSnippetsTextBox.UpdateRegex()
   at Microsoft.OneCode.Utilities.UserControl.CodeSnippetsTextBox.OnMyWorkCollectionChanged(System.Object, System.Collections.Specialized.NotifyCollectionChangedEventArgs)
   at System.Collections.ObjectModel.ObservableCollection`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].OnCollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs)
   at System.Collections.ObjectModel.ObservableCollection`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].InsertItem(Int32, System.__Canon)
   at System.Collections.ObjectModel.Collection`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].Add(System.__Canon)
   at Microsoft.OneCode.IntellisensePresenter.ViewModel.IntellisenseViewModel.UpdateCodeSnippets(System.Collections.Generic.IEnumerable`1<Microsoft.OneCode.DataModel.CodeSearchResult>)
   at Microsoft.OneCode.IntellisensePresenter.ViewModel.IntellisenseViewModel+<>c__DisplayClass5.<SearchCode>b__2()
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, …
Run Code Online (Sandbox Code Playgroud)

.net c# javascriptserializer visual-studio-2013

6
推荐指数
1
解决办法
583
查看次数

JavaScriptSerializer.Deserialize不接受JavaScriptSerializer.Serialize序列化的日期

如何找到此问题的来源,JavaScriptSerializer无法对JavaScriptSerializer序列化的日期值进行反序列化?

在调用应用程序中:

var serializer = new JavaScriptSerializer();
var json = serializer.Serialize(model);

// generates this json
{'Guid':'guid','OrderNumber':'1','OrderDate':'\/Date(1299456000000)\/',
   'OrderStatus':'Completed','DiscountRate':0.0000}
Run Code Online (Sandbox Code Playgroud)

在接收申请中:

string json = @"{'Guid':'guid','OrderNumber':'1','OrderDate':'\/Date(1299456000000)\/',
                 'OrderStatus':'Completed','DiscountRate':0.0000}";
var serializer = new JavaScriptSerializer();
var model = serializer.Deserialize(json);
Run Code Online (Sandbox Code Playgroud)

引发String was not recognized as a valid DateTime异常.

如果JavaScriptSerializer序列化日期,为什么JavaScriptSerializer不能反序列化?

c# serialization json javascriptserializer deserialization

5
推荐指数
1
解决办法
3317
查看次数

JavaScriptSerializer的嵌套列表

我正在尝试使用Net 3.5中的JavaScriptSerializer生成以下JSON结构:

{
    "chart": "pie",
    "series": [
        {
            "name": "Browsers",
            "data": [
                [
                    "Firefox",
                    6
                ],
                [
                    "MSIE",
                    4
                ]
            ],
            "size": "43%"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我面临的问题是关于数据部分.我似乎无法创建一个序列化为数据上述结构的类.

我已经阅读了其他帖子哪种触摸主题,但解决方案似乎总是使用JSON.Net.例如,使用JavaScriptSerializer序列化字典.虽然,我通常希望通过使用.Net 3.5框架中的JavaScriptSerializer或其他内置功能来解决它​​.

如何生成数据部分?

*编辑使用JavaScriptSerializer解决它的方法是为要序列化的对象上的data属性创建一个对象数组.

输入参数数据为"Firefox:6 \nMSIE:4 \nChrome:7".

public object [] GetData(string data){var dataStrArr = data.Split(new [] {Environment.NewLine},StringSplitOptions.None);

        var dataArr = new object[dataStrArr.Length];

        for (var index = 0; index < dataStrArr.Length; index++)
        {
            var component = dataStrArr[index];
            var componentArr = component.Split(':');
            if (componentArr.Length != 2) …
Run Code Online (Sandbox Code Playgroud)

json javascriptserializer

5
推荐指数
1
解决办法
986
查看次数

JavascriptSerializer异常

我有以下数据:

{ "数据":{ "ID": "7IaWnXo", "标题":空, "说明":NULL, "日期时间":1397926970, "类型": "图像/ PNG", "动画片":假,"宽度"60," 高度 ":60," 大小 ":1277," 意见 ":0," 带宽 ":0," 最爱 ":假的," NSFW ":空," 节 ":空," deletehash": "KYIfVnHIWWTPifh", "链接": "http://i.imgur.com/7IaWnXo.png"}, "成功":真实的, "身份":200}

而我正在尝试将其序列化为:

public struct ImageInfoContainer
    {
        public ImageInfo data {get; set;}
        bool success { get; set; }
        string status { get; set; }
    }
    public struct ImageInfo
    {
        public string id {get; set;}
        public string title { get; set; }
        public string url { get; set; }
        public string …
Run Code Online (Sandbox Code Playgroud)

c# exception javascriptserializer

5
推荐指数
1
解决办法
8960
查看次数

使用 JavaScriptSerializer 反序列化 JSON 字符串以返回单个动态对象而不是键和值的数组

考虑 C# 中的以下 JSON 字符串:

{
    "BuyerRegion":"BuyerRegion [0][27]",
    "SellerRegion":"SellerRegion [0][29]",
    "HubRegion":"HubRegion [0][31]",
    "PartNo":"TINT_MNUM [0][3]",
    "BuyerCompID":"BuyerCompId [0][28]",
    "SellerCompId":"SellerCompId [0][30]",
    "HubCompId":"HubCompId [0][32]"
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用以下命令将字符串反序列化为 C# 中的动态对象:

object obj = new JavaScriptSerializer().Deserialize<object>(s); //where s contains the JSON string
Run Code Online (Sandbox Code Playgroud)

但是,返回的obj是键/值对的数组:

在此输入图像描述

知道如何将它们反序列化为一个动态对象,我可以使用以下方式访问属性:

obj.BuyerRegion //returns "BuyerRegion [0][27]"
Run Code Online (Sandbox Code Playgroud)

JsonConvert/NewtonSoft 不是一个选择。

c# json javascriptserializer

5
推荐指数
1
解决办法
495
查看次数