我有一个大型JSON文件,我使用newtonsoft.json进行了重新陈述 - 而且我正在遇到性能问题,特别是.关于一个具体细节: 何时进行审理时,我需要使用IOC("控制倒")容器来创建所需的实例. 受 i使用选项TypeNameHandling.Objects序列化数据,其中包括每个类的"$type"令牌. 如果我发现类型还不够,我会做类似以下操作的事情: JObject o = JObject.Load(reader); var typeName = o["$type"].ToString(); if (!tryGetBindingByName(typeName, out var detectedBinding)) throw new SpecificBindingNotFoundBinderException(typeName, binding); result = detectedBinding.DeserializeType; //"
以下是关于 json.net 的编程技术问答
这是我问题的背景: 有成千上万个元素的JArray.它是样品中的雨伞(JArray). 还有另一个小列表,只有一百个元素.它被称为 umbrellastoberemavedids (List). 我正在尝试这种方法来删除这些雨伞: foreach (string umbrellaToRemoveId in umbrellasToBeRemovedIds) { umbrellas.FirstOrDefault(o => o["Id"].Value() == umbrellaToRemoveId)?.Remove(); } 考虑伞状ober虫的尺寸小于雨伞. 从此伞> JArray中删除元素的最快方法(性能)是什么? 解决方案 有两个特定于JArray的问题要牢记性能: List.RemoveAll(Predicate) 使用Shift-shift-shift-- down-and-resize-o
我们使用newtonsoft.json Nuget软件包将响应流对内存记录进行了序列化,以便进一步操纵,我们正在使用HTTP上的JSON序列化的大型(GB)网络流. 鉴于数据量过多,我们正在使用流媒体一次接收响应的一部分,并希望在达到CPU限制时优化此过程. 优化的候选者之一似乎是 jsontextreader ,它不断分配新对象,因此触发了垃圾收集. 我们遵循了Newtonsoft的建议我已经创建了一个示例.NET控制台应用程序模拟了分配新对象的行为,因为jsontextreader正在通过响应流进行读取,分配代表属性名称和值的字符串 问题: 我们还有什么可以调整/替代以重复使用已经分配的属性名称/值实例,在现实世界中给出了95%的重复(在测试中,它是相同的记录,所以100%重复)? 示例应用程序: Install-Package Newtonsoft.Json -Version 12.0.2 Install-Package System.Buffe
,我们正在考虑替换JSON(WCF或其他)调用的"经典" SOAP XML WCF调用,因为在JavaScript中直接使用较低的开销和易于使用.目前,我们刚刚在我们的Web服务中添加了一个额外的JSON端点,并在某些操作中添加了WebInvoke属性并对其进行了测试.使用C#.NET客户端或JavaScript客户端,一切正常.到目前为止还不错. 然而,似乎可以将大json字符串化为c#.NET中的对象比绝望soap xml慢得多.两者均使用DataContract和DataMember属性(完全相同的DTO).我的问题是:这是期望的吗?我们可以做些什么来优化这种性能?还是我们应该仅考虑较小的请求,在我们注意到绩效改进的情况下. 目前,我们选择了此测试的JSON.NET,即使在此测试案例中没有显示它,也应该比.NET JSON Serialization更快. ServiceStack的避难所完全不起作用(没有错误,返回iList null). 对于测试,我们进行服务
我正在尝试将JSON字符串供电到接口实例, 但是我的代码返回了异常消息 '无法创建类型form1+ifoo的实例.类型是接口或抽象类,无法实例化.路径'值' 但是我做不到什么?,我想解决此案,谢谢. 这是代码 public interface IFoo { int value { get; } } [Serializable] public class Foo : IFoo { public int value { get { return 1; } } } public void run() { IFoo foo = new Foo(); string json = JsonConvert.SerializeObject(foo); //it's working
应用程序中的响应输出未很好地形成. 将问题缩小到最小可能的大小,应该有一些缺少的细节产生这种行为(其他原因很可能). 以下代码显示JSON有效负载为API端点的响应: [HttpPost] public async Task Post() { var json = JsonConvert.DeserializeObject( @"{""parameter-1"":""J234546ZrVl"",""value-2"":""3E9CY3gertertmdALWMmHkvP"",""test-3"":""verify please""}"); var result = new ObjectResult(json); return result; } 收到响应为: {"parameter-1":[],"value-2":[],"te
我有这样的文档 { "Field1": 1, "Field2": 2, "Field3": { Type: "TheMotherLoad" } } 我想转换为此类,但要保留3个" RAW/AS-IS". public class Fields { public int Field1 { get; set; } public int Field2 { get; set; } public string Field3 { get; set; } } 结果应为 Field1 = 1, Field2 = 2, Field3 = "{ Type: "TheMotherLoad" }" 与json.net? 可能 解决方案 field3可能是一项局限.当您需要JSON时,只需致电field3.tostring()
我有一个很大的C#对象的情况,但是,我只需要返回少数属性(可以在嵌套对象上),允许客户端端JavaScript修改这些属性,然后发送发送最终的对象返回服务器以执行现场部分de-Serialization. 这个想法是重新使用一些非常大的现有业务对象,但只需仅将这些属性序列化并将这些属性发送回客户端应用程序以进行修改(以最少传输数据量). i基本上有一个XML文件,我使用"路径语法"预先定义所有绑定,该文件仅表示我需要序列化的那些属性.因此,我可以使用" workorder.userfield1"或" workordor.client.name". 之类的东西. 我尝试使用自定义合同解析器来确定是否应序列化财产;但是,似乎我没有有关"路径"(换句话说,对象模型中的其他属性)的信息,以确定属性是否应序列化. 我也尝试使用自定义JSontextWriter,但是即使有可用的路径属性,我似乎也无法覆盖跟踪路径所需的方法.我是否忽略了一些简单的东西,以便能够查看属性序列化的路径层
嗨,我需要您的帮助才能进行json对象.这是我写的代码 String s = File.ReadAllText(@"C:\Users\User\Desktop/json1.json"); var myfields = Newtonsoft.Json.JsonConvert.DeserializeObject(s); Console.WriteLine(myfields.FieldOne); 这是JSON对象的类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json; using System.IO; public class YourTwoField { [JsonProperty("brand_name")]
我想在在线流上吸引大量的观众. 现在,此流是在线供参考,上述URL的JSON看起来像这样: { "_links": { "self": "https://api.twitch.tv/kraken/streams/ludendi", "channel": "https://api.twitch.tv/kraken/channels/ludendi" }, "stream": { "_id": 9911305984, "game": "The Legend of Zelda: Majora's Mask", "viewers": 3848, "preview": { "small": "http://static-cdn.jtvnw.net/previews-ttv/live_user_ludendi-80x50.jpg",
我需要从json StreamReader中进行估算,而无需为该流中的每个对象实例化中间对象. 不接受StreamReader, 如内存profiler所示,在内存中创建了JSON结构的整个Newtonsoft.Json.*类. _我实际上不确定是这种情况,因为我的JsonConverter s _ 甚至没有关注new JsonSerializer().Deserialize(new JsonTextReader(streamReader)) 我想要的零方法是 sax sax or 我理想地想要的是 的API object JsonCooler.DeserializeObject( StreamReader jsonStream, Converter[] converters) 将直接序列化到类T的新实例中,而不是将其所有类似DOM的对象保存在内存中. 这样的避难所是否存在?或我在概念层面缺少什么? 解决方案 我怀疑这是一种用例变得越来
所以我正在使用json.net来解析JSON数据.我使用JObject类工作的动态解析工作,但我正在寻找一种更有效的方法.这只是基础知识,我的最终解决方案将变得更加复杂,但是首先是我需要获得基础知识. 所以我有这个JSON数据... { "count":1, "results": [{ "user_id":5029420, "login_name":"EtsyStore", "creation_tsz":1282269739, "referred_by_user_id":null, "feedback_info": { "count":3038, "score":100 } }], "params": { "user_id":"etsystore" }, "t
我有一个指定的JSON文档,例如: { "user":"human1", "subsystems":[1,2,3], "query":{"AND":[ {"eq":["key1","val1"]}, {"eq":["key2","val2"]}, {"OR":[ {"eq":["subkey1","subval1"]}, {"eq":["subkey2","subval2"]}]} ] } } 预期的query字段的转换: (key1 eq val1 and key2 eq val2 and (subkey1 eq subval1 OR subkey2 eq subval2
这是我在C#和JSON上的第一个小项目.我被要求将JSON文件解析为以下内容: 我正在尝试创建一个Windows表单,其身体将以以下格式包含JSON字符串的内容: Name of the object (Label) name of the attribute of the object - (TextBox) editable value (Label) name of the attribute of the object - (TextBox) editable value ... 我在JSON文件中的每个对象和8个对象中有大约35个属性.总共有大约50个不同的属性.我搜索了JSON -C# -JSON.NET,并阅读了15多个问题和答案.答案为像我这样的初学者提供了一些有价值的信息,但我无法将答案与我的情况联系起来.这些是原因: 一些答案将JSON字符串转换为C#对象.由于我需要对象的属性的"名称",因此此选项并没有将我作为解决方案.我不知道如何在源代码中获取
我有两个JSON文档,它们代表相同的层次结构和内容.我在两个文档之间看到的唯一区别是,键值对的排序是不同的.一个文档按照我的期望解析,另一个文档不会. 我正在使用"保存参考处理",因此节点应引用其父. (测试中的变量" eRARCARCHYTWONODE"是没有其父属性集的文档).我包括了一次测试( )证明这一点.这是工作JSON的简化版本: { "Root": { "$id": "1", "Id": "1472459628771017730", "Type": "cras", "Content": { "Name": "lorem" }, "Parent": null, "Children": [ { "$id": "2", "Id": "1472459628812960771", "Type": "morbi", "Conte
我有一个JSON字符串: {"responseData": {"results": [ {"GsearchResultClass": "GblogSearch", "title":"\u003cb\u003eParis Hilton\u003c/b\u003e shops at Sydney Michelle boutique in the Beverly Glen \u003cb\u003e...\u003c/b\u003e", "titleNoFormatting":"Paris Hilton shops at Sydney Michelle boutique in the Beverly Glen ...", "postUrl":"http://www.celebrity-gossip.net/celebrities/hollywood/paris-hilton-sydney-mi
我有一个JSON字符串,我正在尝试使用JSON.NET解析,我想循环并使用komponent数组中的名称.这是我的JSON字符串: {"Name": "Service","jsonTEMPLATE": "{"komponent": [{"name": "aa"}, {"name": "bb"}]}"} 这是我使用json.net 的代码 JObject o = JObject.Parse(serviceData); JToken j = (JToken)o.SelectToken("jsonTEMPLATE"); JArray a = (JArray)j.SelectToken("komponent"); foreach (JObject obj in a) { //Do something } 我从(JArray)j.SelectToken("komponent"); 获得null 我在做什么错?
首先,我制作了一个应用程序,然后我开始为其进行测试(知道这不是很好),在解析等方面一切都很好,但是在我进行的测试很少后会出现错误: newtonsoft.json.jsonreaderexception:jsonreader的错误读取职位.当前的JSONREADER项目不是一个对象:StartArray.路径'',第1行,位置1. 错误发生jObject = JObject.Parse(content);,那里arrayList = JArray.Parse(content); internal JObject DoParse(string content) { JObject jObject = new JObject(); if (content != null) { if (content.Contains("Unable")) { MessageBox.Show("Not found
我正在使用JSON.NET进行JSON避难所化.有时我读的JSON字符串不正确(由于我不产生它,因此无法修复).特别是在一个特定的地方,应该有一个字符串,有时会有一个序列化对象.然后,JSON.NET抱怨要找到一个对象期望字符串的对象. 我发现我可以通过在JsonSerializerSettings中使用Error拦截这一点,还可以通过设置ErrorContext.Handled来忽略json.net.但是我想做更多的事情.如果我可以查看序列化对象,我可以弄清楚字符串应该是什么,从理论上讲,请提供正确的答案.在实践中,我无法弄清楚我们该怎么做.特别是在错误处理程序中: 如何访问解析器绊倒的字符串(请注意,如果设置了ErrorContext.Handled,解析器可以成功继续,以便它可以正确确定问题字符串的启动和结束)? )? 如何向解析器提供正确的字符串,或者可以访问当前解析的对象,以便我可以手动设置值? [编辑] 按照要求的简化示例: 我要解析的错误JSON
我已经收到了一个应用程序,其中输入已从50K位置记录扩展到110万个位置记录. 这引起了严重的问题,因为整个文件先前已被解散为一个对象. 对于具有110万个记录的文件的生产,该物体的大小为〜1GB. 由于大量对象GC问题,我想将去序列化的对象保持在85K标记以下. 我试图一次解析一个单个位置对象并去除序列化,以便我可以控制对象的数量 这将被去序列化,然后控制对象的大小.我正在使用json.net库来执行此操作. 下面是我作为流中的流中收到的JSON文件的示例. { "Locations": [{ "LocationId": "", "ParentLocationId": "", "DisplayFlag": "Y", "DisplayOptions": "", "DisplayName": "", "Address": "", "Seconda