Tag: javascriptserializer

JavaScriptSerializer命名空间问题

我在尝试实现JavaScriptSerializer来解析从服务器接收的JSON字符串时遇到问题。 我实现了以下代码: responseFromServer = readStream.ReadLine(); JavaScriptSerializer ser = new JavaScriptSerializer(); var dict = new JavaScriptSerializer().Deserialize<Dictionary>(responseFromServer); var status = dict[“notificationType”]; Debug.WriteLine(status); 我添加了using System.Web.Script.Serialization; Visual C#2010 Express告诉我命名空间名称Script在命名空间System.Web中不存在。 因此JavaScriptSerializer无效。 我错过了使用它,还是有更好的方法来解析JSON字符串?

使用Json和JavaScriptSerializer反序列化JSON结果

这是我的问题: 我正在尝试将我没有完成的json反序列化。 json的格式如下: {“responseId”:1200, “availableHotels”:[ {“processId”:”HA-84665605″,”hotelCode”:”UKKTLT”,”availabilityStatus”:”InstantConfirmation”,…}, {“processId”:”HA-28600965″,”hotelCode”:”UKKTLT”,”availabilityStatus”:”InstantConfirmation”,…}, {“processId”:”HI-63991185″,”hotelCode”:”UKJOVF”,”availabilityStatus”:”InstantConfirmation”,…} ], “totalFound”:9, “searchId”:”TP-84026455″} 以下课程: 具有以下属性的getAvailableHotelResponse: hotelObj可用的酒店 int totalFound 字符串responseId 字符串searchId hotelObj w / property: 酒店 酒店带有物业: 的ProcessID hotelCode availabilityStatus … 因此,我知道通过查看json可以看出它包含getAvailableHotelResponse对象的信息。 所以,我使用JsonConvert和JavaScriptSerializer尝试了以下内容: JavaScriptSerializer ser = new JavaScriptSerializer(); getAvailableHotelResponse availableResponse = ser.Deserialize(json); // Exception: “Type ‘com.hotelspro.api.getAvailableHotelResponse’ is not supported for deserialization of an array” List items = ser.Deserialize<List>(json); […]

在C#中,当一个字段可能是字符串或字符串数​​组时,如何反序列化此json?

我有一个asp.net-mvc网站,我正在从数据库中读取Json字符串。 以下是DB中的以下json。 它可能看起来像这样: {“description”: “Test”, “contacts”: [“joe@gmail.com”, “bill@yahoo.com”], “enabled”: true} 或这个: {“description”: “Test”, “contacts”: “joe@gmail.com, bill@yahoo.com”, “enabled”: true} 如您所见,联系人字段是: 一个字符串(用逗号分隔的项目) 一串字符串。 我想转换为这个类: public class MyJob { public string description; public string[] contacts; public string enabled; } 当我尝试使用JavascriptSerializer()仅指定一个字符串(将上面的内容更改为:public string contacts;)时: var serializer = new JavaScriptSerializer(); string contacts = serializer.Deserialize(theAboveJsonString).contacts; 我在它的数组的情况下得到这个错误: 类型’System.String’不支持反序列化数组。 什么是反序列化处理以下情况的最佳方法: 一个字符串 一串字符串。 对于联系人字段。 我很乐意提出所需的任何条件逻辑。 […]

将json转换为c#对象列表

Json字符串: {“movies”:[{“id”:”1″,”title”:”Sherlock”},{“id”:”2″,”title”:”The Matrix”}]} C#类: public class Movie { public string title { get; set; } } C#将json转换为电影的c#列表: JavaScriptSerializer jss = new JavaScriptSerializer(); List movies = jss.Deserialize<List>(jsonString); 我的movies变量最终是一个空数列表,其中count = 0.我错过了什么吗?

JavaScriptSerializer 对虚拟属性无效?

我已经返回了一个Json(myObj)动作结果。 myObj是Badge类型 Badge具有的唯一两个可能导致序列化程序循环的对象是: public class Badge { public Badge() { } public Badge(String Name, String Description) { this.Name = Name; this.Description = Description; } [ScriptIgnore] public virtual BadgeType BadgeType { get; set; } [ScriptIgnore] public virtual ICollection Users { get; set; } public int ID { get; set; } public string Name { get; set; […]

将小数序列化为JSON,如何舍入?

我上课了 public class Money { public string Currency { get; set; } public decimal Amount { get; set; } } 并希望将其序列化为JSON。 如果我使用JavaScriptSerializer我会得到 {“Currency”:”USD”,”Amount”:100.31000} 由于API我必须符合需要JSON数量最多两个小数位,我觉得应该可以以某种方式改变JavaScriptSerializer序列化十进制字段的方式,但我不知道如何。 您可以在构造函数中传递SimpleTypeResolver ,但只有在我能理解的情况下它才适用于类型。 你可以通过RegisterConverters(…)添加的JavaScriptConverter似乎是为Dictionary做的。 我想得到 {“Currency”:”USD”,”Amount”:100.31} 在我序列化之后。 此外,改为双倍是不可能的。 我可能需要做一些舍入(100.311应该变成100.31)。 有谁知道如何做到这一点? 是否有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 items = ser.Deserialize(new StreamReader(response.GetResponseStream()).ReadToEnd()); 但是,这不起作用,因为我“不能隐式地将类型’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)\/” }] 这是我的Item类的样子: public class Item { public int Id […]

JavaScriptSerializer – 自定义属性名称

我正在使用JavaScriptSerializer来反序列化json数据。 一切都很好,但我的问题是,json数据中的一个属性被命名为“base”,所以我不能在我的C#代码中创建这样的属性。 我发现我可以手动将值映射到构造函数中的属性,但问题是,我的DTO有200个属性,所以我不想手动制作,而是希望找到任何其他解决方案。 我也尝试使用注释,但这个: [JsonProperty(“base”)] public int baseValue { get; set; } 没有帮助我,值baseValue每次设置为0(如果你认为,这个注释应该工作,我可以发布我的整个代码,不仅这2行) 有什么办法可以简单地解决我的问题吗?

使用json.net大小限制序列化数据?

我开发了一个asp.net Web应用程序,最初使用内置的javascript序列化程序将一些数据序列化为json字符串。 这成了问题,因为我后来发现有一个关于我能够序列化的数据量的问题。 在使用JSON JavaScriptSerializer进行序列化或反序列化期间,我一直收到“”错误。 字符串的长度超过了maxJsonLength属性上设置的值“。通过使用json.net序列化/反序列化我的数据很快就解决了这个问题。这意味着使用json.net序列化/反序列化时没有预设的最大大小或者有一个限制高于javascriptserializer使用的限制。 我的问题很简单。 在使用json.net进行序列化/反序列化时,我将来会遇到类似的问题吗? 即使用json.net序列化数据时是否有大小限制,或者我可以假设没有限制,我的程序应该没问题,因为数据库的大小增加了? 我在json.net的讨论论坛上问了这个问题,但没有收到回复。 我希望有人知道答案。 提前致谢。

从C#.NET中的DataTable到JSON

我是C#和.NET的新手,但我已经使这段代码调用存储过程,然后我想获取返回的DataTable并将其转换为JSON。 SqlConnection con = new SqlConnection(“connection string here”); SqlDataAdapter da = new SqlDataAdapter(); SqlCommand cmd = new SqlCommand(“getDates”, con); SqlParameter par = new SqlParameter(“@PlaceID”, SqlDbType.Int); par.Value = 42; da.SelectCommand = cmd; cmd.Parameters.Add(par); DataSet ds = new DataSet(); DataTable dt = new DataTable(); con.Open(); try{ cmd.CommandType = CommandType.StoredProcedure; da.Fill(ds); } 我的问题是,最好/最简单的方法是什么? 一个例子会很棒,因为我还是很陌生。