Tag: json.net

将json属性解析为特定类型

我的出发点是这样的(在这里简化): private object GetPropValue(JToken token, Type type) { return JsonConvert.DeserializeObject(token[“prop”].ToString(), type); } 用法: var value = GetPropValue(JObject.Parse(someJsonWithAPropertyNamedProp), typeof(someTypeFoundByReflection)); 这是有效的,除了那个类型是字符串。 根据文档,JValue的ToString()应该返回一个JSON, 但是当JValue是一个类型字符串时,返回的值不是JSON,而是一个简单的字符串,不包含转义引号。 因此,我得到一个例外: Newtonsoft.Json.dll中出现“Newtonsoft.Json.JsonReaderException”类型的exception,但未在用户代码中处理 附加信息:解析值时遇到意外的字符:s。 路径”,第0行,第0位。 实现这一目标的最佳方法是什么? 如果JToken是string类型,添加一个条件?

Json.NET:使用对象列表进行反序列化

我正在从Windows Phone 7客户端上的服务处理JSON响应(如下所示)。 我正在使用Json.NET将它们反序列化为一个包含产品列表的对象。 但在我反序列化之后,当我查看我的serviceresponse对象时,我可以看到2个产品的列表。 但是当我展开产品对象时,product(Name,ExpiryDate …等)下的字段都是null。 我想我的问题在于我定义了serviceresponse类的方式。 有人可以帮我解决问题并获得正确的输出。 我的反序列化代码: serviceresponse deserializedProduct = JsonConvert.DeserializeObject(json); 我的Json响应字符串: { “serviceresponse” : { “company” : “ford”, “success” : “Yes”, “products” : [ {“product” : { “Name”: “Product 1”, “ExpiryDate”: “\/Date(978048000000)\/”, “Price”: “99.95”, “Sizes”: “1” } }, {“product” : { “Name”: “Product 2”, “ExpiryDate”: “\/Date(1248998400000)\/”, “Price”: “12.50”, “Sizes”: “1” } […]

使用本文和Json.Net从文件中存储和检索大型Json(100 mb +)的有效方法

我一直试图找出使用JSon.net从包含Json的文件存储和检索数据的最佳方法。 在我的研究期间,我找到了几种方法。 http://www.drdobbs.com/windows/parsing-big-records-with-jsonnet/240165316 http://www.ngdata.com/parsing-a-large-json-file-efficiently-and-easily/ Jackson Api(仅适用于Java) 任何这种方法都可以与Json.Net一起使用吗? DrDoobs的文章是否有可用的实际实现? 我无法弄清楚HandleToken(reader.TokenType,reader.Value)方法。 目前的统计数据: 大约5分钟写出大小约为60Mb的Json 大约3分钟阅读Json。 现行代码: public static T DeserializeJsonFromStream(Stream s) { using (StreamReader reader = new StreamReader(s)) { using (JsonTextReader jsonReader = new JsonTextReader(reader)) { JsonSerializer ser = new JsonSerializer(); ser.Formatting = Newtonsoft.Json.Formatting.None; ser.PreserveReferencesHandling = PreserveReferencesHandling.Objects; ser.TypeNameHandling = TypeNameHandling.All; ser.NullValueHandling = NullValueHandling.Ignore; ser.Error += ReportJsonErrors; ser.DateFormatHandling = […]

如何使用C#中的Json.NET从JSON访问嵌套对象

如何使用类装饰在嵌套对象中选择json值“estimatedLocationDate” ? 属性“estimatedLocationDate”始终返回null而不是值2015-10-01T14:00:00.000 。 其他修饰值返回正确的值。 这是我的C#类 public string id { get; set; } public string name { get; set; } [JsonProperty(“publishedDate”)] public string publishdate { get; set; } [JsonProperty(“estimatedLocationDate”)] public string estimatedLocationDate{ get; set; } [JsonProperty(“createdTime”)] public string createtime { get; set; } [JsonProperty(“lastUpdatedTime”)] public string lastupdate { get; set; } 这是JSON “planet”: [ { […]

Newtonsoft.Json,Path返回了多个令牌

对于此代码: JObject o = JObject.Parse(jsStr); var sel = o.SelectToken(“.items[*].owner”); 其中jsStr是https://api.github.com/search/repositories?q=Newtonsoft.Json&sort=stars&order=desc的内容 我会得到错误的 Path returned multiple tokens. 如何使其工作?

如何将JSON属性转换为XML作为xml元素的属性

使用Newtonsoft的.Net库将JSON转换为XML,有没有办法将特定的JSON元素转换为XML属性? 例如,采用以下JSON: { “array”: { “item”: [ 1, 2, 3 ], “length”: 3 } } 并将其转换为: 1 2 3 谢谢。

使用C#中的Newtonsoft反序列化嵌套的JSON对象

这是我正在尝试反序列化的示例JSON字符串: { “background”: “#ededf0”, “theme”: “Flat”, “name”: “Control Page Name”, “scriptName”: “Control Page Script”, “objects”: [{ “ID”: “76799598”, “position”: { “top”: 0.30428571428571427, “left”: 0.6054421768707483 }, “width”: 0.09451596023024594, “height”: 0.07450128571428571, “label”: “btn”, “colour”: “blue”, “action”: “OpenLayout”, “actionParams”: { “actionName”: “Explorer”, “itemId”: “91d5bfff-a723-498a-a846-24a9e41fbaa6”, “groupId”: “bf434b0d-90c2-496a-96ce-c09f228255b4” } }] } 我似乎无法遍历JSON的“对象”关键节点值。 之前的一切都很好(背景,主题,名称和scriptName)。 这是我的转换器 { JObject panel = (JObject)serializer.Deserialize(reader); var […]

循环通用对象属性

我有一个存储在数据库中的JSON字符串,如下所示: { “Error”: “Lol”, “ErrorDate”: “2016-05-13T10:43:27.6365795Z”, “Application”: “Business”, “UserName”: “Josh”, “TraceSession”: “moo” } 表中的每个项目的JSON字符串都不同。 在我的应用程序中,我想将其反序列化为一个对象,但由于JSON始终不同,我无法创建模型。 目前我有这个: var jObject = JsonConvert.DeserializeObject(FieldNames); 我认为可以工作,但现在我需要遍历属性以获取密钥名称和值。 我试过这个: // For each property in our oject foreach (var key in jObject.GetProperties()) { // Create a list var list = new List(); list.Add(key.GetValue()); // Add our substitution email.AddSubstitution($”–{ key.ToUpper() }–“, list); } 但它失败了,因为 […]

如果name为大写,则Newtonsoft JsonConvert.SerializeObject忽略JsonProperty

我希望能够使用CamelCasePropertyNameContractResolver但是为特定的属性名称覆盖它。 为此,我使用JsonProperty属性。 这工作正常,除非我选择的名称是完全大写。 任何想法有什么问题或如何解决它? 在下面的示例中,当我不使用CamelCasePropertyNameContractResolver时, Bar被序列化为”BAR” ,但在我使用解析器时序列化为”bar” 。 在两种情况下都可以正确序列化Foo和CamelCaseProperty 。 using Newtonsoft.Json; using Newtonsoft.Json.Serialization; namespace ConsoleTester { class Program { static void Main(string[] args) { var foo = new FooBar {CamelCaseProperty = “test”, Foo = “test”, Bar = “test” }; var output = JsonConvert.SerializeObject(foo); // output “CamelCaseProperty”, “fOO”, “BAR” var output2 = JsonConvert.SerializeObject(foo, new JsonSerializerSettings […]

将json属性反序列化为bool或double

我有以下json: “rates”: { “AT”: { “country”: “Austria”, “standard_rate”: 20.00, “reduced_rate”: 10.00, “reduced_rate_alt”: 13.00, “super_reduced_rate”: false, “parking_rate”: 12.00 }, “DK”: { “country”: “Denmark”, “standard_rate”: 25.00, “reduced_rate”: false, “reduced_rate_alt”: false, “super_reduced_rate”: false, “parking_rate”: false }, } 我有以下类来反序列化json: public string country { get; set; } public double standard_rate { get; set; } //public string reduced_rate { get; set; […]