Tag: json

Json.net反序列化列表提供重复项

我刚开始使用Newtonsoft.Json(Json.net)。 在我的第一个简单测试中,我在反序列化通用列表时遇到了问题。 在下面的代码示例中,我序列化了一个对象,包含三种类型的简单整数列表(属性,成员var和数组)。 生成的json看起来很好(列表转换为json数组)。 但是,当我将json反序列化为相同类型的新对象时,所有列表项都是重复的,期望数组。 我已经通过第二次序列化来说明了这一点。 从搜索周围,我已经读到可能有一个“私人”支持字段到解串器也填充的列表。 所以我的问题是:在下列情况下是否有一种(最好是简单的)避免重复项目的方法? 码 using System; using System.Collections.Generic; using Newtonsoft.Json; namespace JsonSerializeExample { public class Program { static void Main() { var data = new SomeData(); var json = JsonConvert.SerializeObject(data); Console.WriteLine(“First : {0}”, json); var data2 = JsonConvert.DeserializeObject(json); var json2 = JsonConvert.SerializeObject(data2); Console.WriteLine(“Second: {0}”, json2); } } public class SomeData […]

无法使用Json.NET反复使用多个构造函数对类进行反序列化

我有一个我不用多个构造函数控制的类型,相当于这个: public class MyClass { private readonly string _property; private MyClass() { Console.WriteLine(“We don’t want this one to be called.”); } public MyClass(string property) { _property = property; } public MyClass(object obj) : this(obj.ToString()) {} public string Property { get { return _property; } } } 现在,当我尝试反序列化它时,将调用私有无参数构造函数,并且永远不会设置该属性。 考试: [Test] public void MyClassSerializes() { MyClass expected […]

在不知道索引的情况下在C#中解析json

我想用JSON.NET在C#中解析这段JSON,但我不知道如何去做。 JSON: { “success”:true, “rgInventory”:{ “967633758”:{ “id”:”967633758″, “classid”:”23973033″, “instanceid”:”11040671″, “amount”:”1″, “pos”:1 }, “302756826”:{ “id”:”302756826″, “classid”:”15″, “instanceid”:”11041143″, “amount”:”1″, “pos”:2 },… } } 完整的Json: http ://steamcommunity.com/id/jessecar/inventory/json/440/2/?trading =1 我需要获取每个“rgInventory”子元素的元素,但我不能为它创建一个类,因为项目名称总是在变化。 我尝试使用这段代码,但我总是得到一个例外。 dynamic jsObject = JsonConvert.DeserializeObject(jsonString); Console.WriteLine(“Status: “+jsObject[“success”]); //This works fine foreach(var i in jsObject[“rgInventory”]){ Console.WriteLine(“Item ID: “+i[“id”]); //This gives an exception } 例外: 未处理的exception:System.InvalidOperationException:无法访问Newtonsoft.Json.Linq.JProperty上的子值。

ServiceStack.Text是否提供JSON的漂亮打印?

TL; DR:ServiceStack.Text中是否有内置方式来生成漂亮的JSON? 我正在使用ServiceStack.Text来进行JSON序列化。 到目前为止它确实很好用,但是创建的JSON(使用.ToJSON() )没有用空格或换行符格式化(最有可能在通过网络发送时节省空间)。 但是,在某些情况下,将JSON格式化以便于人类可读性会更好。 .Dump ()方法执行某种格式化,但不会生成有效的JSON(即缺少周围的双引号)。

从JObject中提取值

我正在尝试从Json中提取一些值,但我在[]之间的数据有问题 { attrib1: “”es-BO””, attrib2: 2, Segment: [ { inAttrib1: “”value1″”, inAttrib2: “”value2″”, inAttrib3: “”value3″” }] } 对于我正在使用的第一个值: string attrib1 = request.GetValue(“attrib1”).Value(); . . . 但是当我想要做的时候: string inAttrib1 = request.GetValue(“inAttrib1”).Value(); 不起作用……我能做什么?或者存在另一种方法来做同样的事情

C#Json – to – Array

所以我有以下json代码: { “users”:[ { “username”:”Deeside”, “user_id”:750038708, “recent_gifts”:[ ], “class_id”:2, “bonus”:{ “spy_defense”:27000, “plunder”:172793313, “attack”:230400, “defense”:153600, “spy_attack”:27000 }, “superpower_expire_date”:null, “avatar_id”:2, “avatar_type”:1, “cost”:38602761523 }, { “username”:”mac78″, “user_id”:515216476, “recent_gifts”:[ ], “class_id”:2, “bonus”:{ “spy_defense”:0, “plunder”:172793313, “attack”:505800, “defense”:336600, “spy_attack”:0 }, “superpower_expire_date”:null, “avatar_id”:2, “avatar_type”:2, “cost”:38602761523 }, { “username”:”divie”, “user_id”:750047259, “recent_gifts”:[ ], “class_id”:3, “bonus”:{ “spy_defense”:62100, “plunder”:172793313, “attack”:161520, “defense”:108720, “spy_attack”:54000 }, “superpower_expire_date”:null, “avatar_id”:3, “avatar_type”:1, […]

为什么JsonConvert.DeserializeObject不使用指定的JsonConverter?

我编写了一个自定义JsonConverter ,我可以将其分配给JsonSerializerSettings并使用JsonSerializerSettings的generics覆盖: var settings = new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All, Converters = new List() { new MyConverter() } }; var x = JsonConvert.DeserializeObject(input, settings); 序列化的Json也使用TypeNameHandling.All构建,因此它包含$type字段中的类型信息。 但是,在某些情况下,我不知道序列化了什么类型,并且想要使用DeserializeObject的非generics覆盖。 我期待的是,如果我使用相同的设置和/或转换器,并且Json包含类型信息,引擎将能够正确处理Json。 但似乎我的自定义转换器仅用于Json中的嵌套对象,而不是最高级别 – 尽管每个级别都有$type 。 我的问题是没有我的自定义转换器,我需要一个类的默认构造函数。 如果我实现它 – 仅用于测试 – 那么DeserializeObject确实返回正确的类型。 但这不是现实生活中的选择:除其他外,自定义转换器使用IOC容器解析所需的实例,然后填充它们。 我错过了什么或者我要求的根本不可能吗? 编辑:因为它是被请求的,下面是一些示例代码。 在这个示例中,反序列化在没有默认构造函数的情况下工作,显然另一个是使用空值(或default(T) )调用的。 但基本问题仍然存在:没有像我期望的那样使用ExampleConverter 。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; […]

将值转换为我的json中的’System.Collections.Generic.List`类型时出错

我在将CSON转换为对象时遇到问题。 我想知道我的json或对象结构有什么问题? 为什么失败了? 我的JSON是: [ { “added_on” : “10-03-2014”, “country” : “INDIA”, “crew” : “{\”Actor1\”: \”Kangana\”, \”Actor2\”:\”Lisa Haydon\”}\r\n”, “fb_link” : “https://www.facebook.com/Queenthefilm”, “genre” : “DRAMA”, “id” : 1, “image_first_url” : “”, “image_main_url” : “133avk38CcBfNHsqwr0nzqOa8Db.jpg”, “image_second_url” : “”, “name” : “Queen”, “ratings” : “[{\”type\”: \”IMDB\”, \”value\”: \”9.3\”}, {\”type\”: \”TOI\”, \”value\”: \”4\”}, {\”type\”: \”NDTV\”, \”value\”: \”3\”}]”, “release_date” : […]

Web Web API中的严格映射(Over-Posting)

我刚刚意识到从查询发送的JSON与我的API之间的映射并不严格。 我给你更多解释: 这是我的C#POCO public partial class AddressDto { public string AddrId { get; set; } public string Addr1 { get; set; } public string Addr2 { get; set; } public string PostalCode { get; set; } public string City { get; set; } public string Country { get; set; } } 和REST JSON查询 PUT http://Localhost:55328/api/ClientAddr/ADD-2059-S002 […]

如何通过容错来阅读无穷无尽的流

目前我正在开发一个应用程序,它从Twitter api读取流并将其解析为对象。 目前我读取了流并使用DataContractJsonSerializer中的ReadObject来创建我的对象。 这很棒!! 但是:我有点担心在我的程序赶上流程(互联网速度减慢或w / e)的情况下会发生什么,并且没有足够的数据来解析…该方法可能会引发exception,但我想等待新数据,然后重试相同的对象并继续。 此外,我想知道如何使方法更稳定,以防损坏的数据将进入流或类似的东西。 在此先感谢任何答案/想法:)