Tag: javascriptserializer

为什么c#JavaScriptSerializer.Serialize返回空方括号

为什么下面的代码返回“[]”时应该返回“{”id“:1999,”title“:”hithere“} JavaScriptSerializer serializer = new JavaScriptSerializer(); StringBuilder sbJsonResults = new StringBuilder(); var result = serializer.Serialize(new dg(1999, “hithere”)); context.Response.Clear(); context.Response.ContentType = “application/json; charset=utf-8”; context.Response.Cache.SetExpires(DateTime.MinValue); context.Response.Write(result); PS dg类看起来像这样: public class dg : ScheduleObserver, ILibrary, IEnumerable { public int id; public string title; private List dList; …many getters and setters and some logic functions… } public abstract class […]

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); } } 该方法正确地序列化了对象,但是当我在FireBug中查看响应时,它看起来像这样: [{“Title”:”SQL”,”ReleaseDate”:”\/Date(1224007200000)\/”},{“Title”:”Termonator Salvation”,”ReleaseDate”:”\/Date(1224007200000)\/”}] 这是我使用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” […]

如何使用变量名反序列化可变大小的JSON字符串

使用固定字段名称反序列化固定大小的固定结构,JSON字符串很简单:只需定义一个包含所有字段的类(具有正确的类型和名称,在编译时都是已知的)。 反序列化可变大小的重复嵌套对更具挑战性,但可以在类内部的List 的帮助下完成。 但是,如果在编译时字段的名称未知,我该怎么办? 例如: { “container”:{ “GD01AB491103”:{ “field_id1”:11, “field_id2”:12, “field_id3”:13, “field_id4″:”fourteen” }, “DC01AB491103”:{ “field_id1”:21, “field_id2”:22, “field_id3”:23, “field_id4″:”twenty four” }, “GH01AB451101”:{ “field_id1”:31, “field_id2”:32, “field_id3”:33, “field_id4″:”thirty four” } . . . }, “terminator” } 如何反序列化这样的字符串? (最好使用.NET的JavaScriptSerializer,但如果它太弱/无能力,我可能需要诉诸其他东西) 编辑 :澄清挑战的性质:在上面的例子中,为了定义一个类: public class ?????? { public int field_id1 {get;set;} public int field_id2 {get;set;} public int field_id3 {get;set;} public string […]

将类型’System.Dynamic.DynamicObject转换为System.Collections.IEnumerable

我成功地使用MVC3中的JavaScriptSerializer将json字符串反序列化为动态对象。 我无法弄清楚的是如何将它投射到我可以列举的东西上。 下面的foreach代码行是我最新的attemt,但它错误地说:“不能隐式地将类型’System.Dynamic.DynamicObject’转换为’System.Collections.IEnumerable’。如何转换或转换以便我可以遍历字典? public dynamic GetEntities(string entityName, string entityField) { var serializer = new JavaScriptSerializer(); serializer.RegisterConverters(new[] { new MyProject.Extensions.JsonExtension.DynamicJsonConverter() }); dynamic data = serializer.Deserialize(json, typeof(object)); return data; } foreach (var author in GetEntities(“author”, “lastname”))

问题在C#中反序列化JSON日期 – 增加2小时

在将JSON日期反序列化为C#DateTime时,我们遇到了这样一个令人讨厌的问题。 代码是: JavaScriptSerializer serializer = new JavaScriptSerializer(); jsonTrechos = jsonTrechos.Replace(“/Date(“, “\\/Date(“).Replace(“)/”, “)\\/”); Trecho[] model = serializer.Deserialize(jsonTrechos); jsonTrechos是一串json2.js的JSON.stringify(); 。 问题是:反序列化工作,在Trechos对象的所有日期加上2小时。 我的时区是巴西(UTC -3),我们正在夏令时(所以我们目前在UTC -2),如果它有任何关系。 我想也许本地化和时区可能会在这方面发挥作用,如果真的如此,我不知道如何解决它。

JSON使用函数参数序列化对象

我有这个C#对象: var obj = new { username = “andrey”, callback = “function(self) { return function() {self.doSomething()} (this) }” } 我需要JSON序列化它以传递给ajax调用中的浏览器。 我使用JavascriptSerializer,但它序列化为以下JSON: {“username”:”andrey”, “callback”: “function(self) { return function() {self.doSomething()} (this) }”} 但我需要的是: {“username”:”andrey”, “callback”: function(self) { return function() {self.doSomething()} (this) }} 函数定义没有引号。 现在,当JSON对象到达浏览器并创建时,’callback’参数不是函数而是字符串。 知道如何修复它,最好是在服务器端吗?

当子类中使用“new”时,JavascriptSerializer序列化属性两次

尝试创建一个服务来返回一个具有许多共享属性的对象,但在某些情况下,一个属性应该受到高度限制。 这导致奇怪和不期望的行为,其中属性名称在序列化输出中重用,导致浏览器中的行为不正确。 下面是一个可以粘贴到LINQPad的示例(如果添加对System.Web.Extensions的引用)以查看问题: void Main() { System.Web.Script.Serialization.JavaScriptSerializer json = new System.Web.Script.Serialization.JavaScriptSerializer(); json.Serialize(new Full(true)).Dump(); json.Serialize(new Limited()).Dump(); } public class Full { public String Stuff { get { return “Common things”; } } public FullStatus Status { get; set; } public Full(bool includestatus) { if(includestatus) Status = new FullStatus(); } } public class Limited : Full { […]

在C#中反序列化嵌套的JSON数组

我有一个带有嵌套对象的JSON数组,代表一个菜单,如下所示: [ [ { “name”: “Item 1”, “id”: 1 }, { “name”: “Item 2”, “id”: 2, “children”: [ [ { “name”: “Item 21”, “id”: 21 } ] ] }, { “name”: “Item 3”, “id”: 3, “children”: [ [ { “name”: “Item 31”, “id”: 31, “children”: [ [ { “name”: “Item 311”, “id”: 311 }, { […]

如何使用JavaScriptSerializer使用数字键解析JSON对象

我有一个像下面这样的对象在C#中被反序列化。 我想知道如何解析它。 我在这里尝试了这个例子 ,但是我很难理解如何让我的类识别每个对象的键(下面的2和3 )。 下面的JSON字符串基本上代表2个事务。 我想将每个事务表示转换为Transaction对象并将其放入Transaction对象的数组中。 { “2”: { “id”: “2”, “user_id”: “59”, “offer_id”: “1234” }, “3”: { “id”: “3”, “user_id”: “59”, “offer_id”: “1234” } } 这是我的课程: public class Transactions { // what goes here since the “key” field is always different? } public class Transaction { public int id { get; set; } […]

如何序列化原始json字段?

我在db中有一个存储json字符串的字段,当我在json结果中返回它时,我想要它将作为json原始数据返回,而不是用引号作为字符串扭曲。 更新1(更多信息):如果您查看图像字段,它包含原始的json字符串值 但是在用JsonResult序列化之后,它会被引号扭曲,因为它是一种String类型,我怎么能告诉序列化器将图像字段视为原始json数据呢? var db = new ModelsContainer(); var res = db.Images.OrderByDescending(i=>i.DateCreated).Skip(skip).Take(take).Select( i => new { id = i.Id, dateCreated = i.DateCreated, images = i.Images , user = new { id = i.User.Id, facebookId = i.User.FacebookId, displayName = i.User.DisplayName }, tags = i.Tags.Select( t => t.Value ) }).ToList(); return Json(res, JsonRequestBehavior.AllowGet); [ { “id”:”5c528e88-f3a7-4b30-9746-980867325fd1″, “dateCreated”:”\/Date(1364381593000)\/”, […]