Tag: json.net

JSON.net vs XPATH:如何在SelectTokens中保留节点顺序?

XPath 2声明选择的节点顺序应按其在文档中的顺序返回。 当您在JSON.Net中使用SelectTokens(JSONPath)时,情况并非如此 当我处理以下文件时 string json = @” { “”Files””: { “”dir1″”: { “”Files””: { “”file1.1.txt””: { “”size:100″”}, “”file1.2.txt””: { “”size:100″”} } }, “”dir2″”: { “”Files””: { “”file2.1.txt””: { “”size:100″”}, “”file2.2.txt””: { “”size:100″”} } }, “”file3.txt””: { “”size:100″”} } }”; 使用JSON.net SelectTokens(“$ .. files。*”)时的顺序如下 dir1 dir2 file3.txt file1.1.txt file1.2.txt file2.1.txt file2.2.txt 当我期望以下顺序(作为Xpath // files / […]

Newtonsoft JSON-转换到DataSet或从DataSet转换会导致Decimal变为Double?

我正在使用Newtonsoft JSON使用下面的代码将DataSet序列化为二进制JSON。 反序列化回DataSet时,字段类型从Decimal变为Double? 有谁知道出了什么问题? 示例代码: static void Main(string[] args) { var ds = new DataSet(); var dt = ds.Tables.Add(); dt.Columns.Add(“Test”, typeof(Decimal)); dt.Rows.Add(new object[] { 1.23345M }); var data = DataSetToBinJSON(ds); var ds2 = BinJSONToDataSet(data); Console.WriteLine((ds2.Tables[0].Columns[0].DataType == typeof(Decimal)) ? “Passed” : string.Format(“Failed- {0}”, ds2.Tables[0].Columns[0].DataType)); Console.ReadLine(); } /// /// Utility function to create an optimized Binary JSON […]

ServiceStack.Text序列化循环引用

我需要像这样序列化一个对象图: public class A { public B Link1 {get;set;} } public class B { public A Link2 {get;set;} } 这样json只获得两个实例,但再次正确反序列化。 例如,使用元ID或类似的东西。 我知道Json.NET中有一种方法如下所述: http : //note.harajuku-tech.org/serializing-circular-references-with-jsonnet with meta ids。 ServiceStack.Text Json Serializer中是否有类似的function? 否则,是否可以在ServiceStack使用Json.NET以及如何使用? 编辑: 为了说清楚,我要求提供实例引用,而不仅仅是相同类型。 一个例子可能是: [ { “$id”: “1”, “BroId”: 0, “Name”: “John”, “Bros”: [ { “$id”: “2”, “BroId”: 0, “Name”: “Jared”, “Bros”: [ { […]

如何实现json的自定义序列化,将类型附加到属性名称?

我正在尝试使用newtonsoft.json将对象序列化为JSON。 唯一的事情是我不能将json类型附加到字段名称。 考虑这个例子: var item = new { value = “value”, data = new []{“str”, “str”}, b = true }; 我想将其转换为 { “value.string” : “value”, “data.array” : [“str”, “str”], “b.bool” : true } 或类似的东西。 我们的想法是将json类型(不是c#类型)附加到json字段。 我不想附加C#类型的原因是因为它可能很复杂(有时类型是匿名的,有时它是IEnumerable,等等) 我见过许多可以转换为C#类型的解决方案,例如实现IContractResolver。 不幸的是,这不适用于这种情况。 我也不知道我之前会转换的类型。 我能找到的最接近的是 public JObject Convert(JObject data) { var queue = new Queue(); foreach (var child in data.Children()) […]

Json.NET根据属性类型使属性成为必需

我正在努力使用.Net核心中的自定义json序列化,我正在尝试默认所需的所有属性,除非属性具有特定类型。 这是我想要实现的一个例子: 让我们确定我有以下类型:F#: type FooType = { id: int name: string optional: int option } 你可以考虑下面的代码与C#中的类似: class FooType = { int Id {get;set;}; string Name {get;set;}; Nullable Optional {get;set;}; } 我想要做的是返回错误,如果json对象中缺少Id或Name属性,但如果缺少Optional,则反序列化而不会出现错误(因此基本上根据需要将属性设置为不需要)。 我可以使用此示例中的RequireObjectPropertiesContractResolver标记所有属性: https : RequireObjectPropertiesContractResolver但不幸的是我无法构建更具动态性的东西。 我还有我希望添加到序列化的可选类型的默认转换器。 它不是这个特定问题的一部分,但是如果您知道如何将属性标记为必需或在一个地方使用自定义转换器,那么它甚至可能更大。

根据C#中的条件从JSON中删除元素

我有一个JSON字符串,我希望能够在C#中修改。 我希望能够基于其中一个子值是特定值来删除一组数据。 请采取以下措施 { “responseHeader”:{ “status”:0, “QTime”:0, “params”:{ “explainOther”:””, “fl”:”*,score”, “indent”:”on”, “start”:”0″, “q”:”*:*”, “hl.fl”:””, “qt”:””, “wt”:”json”, “fq”:””, “version”:”2.2″, “rows”:”2″} }, “response”:{“numFound”:2,”start”:0,”maxScore”:1.0,”docs”: [{ “id”:”438500feb7714fbd9504a028883d2860″, “name”:”John”, “dateTimeCreated”:”2012-02-07T15:00:42Z”, “dateTimeUploaded”:”2012-08-09T15:30:57Z”, “score”:1.0 }, { “id”:”2f7661ae3c7a42dd9f2eb1946262cd24″, “name”:”David”, “dateTimeCreated”:”2012-02-07T15:02:37Z”, “dateTimeUploaded”:”2012-08-09T15:45:06Z”, “score”:1.0 }] }} 上面显示了两个响应结果。 我希望能够在其子“id”值匹配时删除整个父响应结果组,例如,如果我的id是“2f7661ae3c7a42dd9f2eb1946262cd24”,我希望删除第二组,因此我的结果将如下所示。 { “responseHeader”:{ “status”:0, “QTime”:0, “params”:{ “explainOther”:””, “fl”:”*,score”, “indent”:”on”, “start”:”0″, “q”:”*:*”, “hl.fl”:””, “qt”:””, “wt”:”json”, “fq”:””, “version”:”2.2″, “rows”:”2″}}, “response”:{“numFound”:2,”start”:0,”maxScore”:1.0,”docs”:[ […]

保护我的代码免受Newtonsoft JSON的侵害

我正在构建一个教科书.NET WebAPI Web服务,在最简单的情况下,它应该接收一个GET请求并返回一个JSON对象数组。 但是该项目还加载了NewtonsoftJSON nuget包,显然该包重新定义了ApiController类,因此它的Json()方法具有不同的声明。 最终结果是我得到以下编译时错误: 如何保护我的控制器声明不被Newtonsoft重新定义? public class ImmediateInformationController : ApiController { public JsonResult Get([FromUri] ImmediateInformation ii) { // some code here return this.Json(iil, JsonRequestBehavior.AllowGet); } } 一点背景:最初我只返回iil ,但在浏览器中测试时,它提示下载包含我需要的JSON的ImmediateInformation.json文件。 以上是尝试将JSON作为纯文本返回,这使我发现当参数类型与MSDN文档不匹配时,Newtonsoft重新定义了ApiController 。 重新上限:问题只是使用JSON下载问题来说明我在做什么。 我如何确保当我声明控制器类是ApiController的后代时,它是Microsoft的API控制器,而不是Newtonsoft的?

反序列化动态JSON文件C#NewtonSoft.JSON

正在进行反序列化动态JSON文件,该文件可能包含2个单独的类,我不知道数组中将包含哪种类型的数据。 问题是,我将根对象反序列化为“Base”类型,“subtests”对象被反序列化为“Subtest”,但“subtests”数组可以是“Base”类型或“Subtest”类型。 问题:我如何以编程方式确定如果对象包含“subtest”,我将反序列化为Base,如果不包含,则应将其反序列化为“Subtest”? 因为我的时间很短,所以我非常感谢这方面的帮助。 (编辑:添加注释以显示每个对象应反序列化的类型)以下是一个示例(JSON DATA): { // Deserializes to type “Base” “host”: “123456”, “last_time”: “2014-09-15 07:04:49.205000”, “name”: “myName”, “result”: “FAIL”, “serial”: “12345”, “start_time”: “2014-09-15 06:53:36.976000”, // Deserializes to type “List” “subtests”: [ { “data”: { “moredata”: { “ver”: “123”, “real”: 123 } }, “description”: “Description of Data”, “host”: “123456”, “last_time”: “2014-09-15 20:32:31.095000”, “name”: “testname.py”, […]

分割大型JSON文件的策略

我正在尝试将非常大的JSON文件拆分为给定数组的较小文件。 例如: { “headerName1”: “headerVal1”, “headerName2”: “headerVal2”, “headerName3”: [{ “element1Name1”: “element1Value1” }, { “element2Name1”: “element2Value1” }, { “element3Name1”: “element3Value1” }, { “element4Name1”: “element4Value1” }, { “element5Name1”: “element5Value1” }, { “element6Name1”: “element6Value1” }] } …向下到{“elementNName1”:“elementNValue1”}其中N是一个大数字 用户提供表示要拆分的数组的名称(在此示例中为“headerName3”)和每个文件的数组对象数,例如1,000,000 这将导致N个文件各自包含顶部名称:值对(headerName1,headerName3)和每个文件中最多1,000,000个headerName3对象。 我正在使用优秀的Newtonsof JSON.net,并了解我需要使用流来完成此操作。 到目前为止,我已经查看了JToken对象中的一个读数,以确定在读取标记时PropertyName ==“headerName3”的位置,但我想要做的是在整个JSON对象中读取数组中的每个对象而不是继续将JSON解析为JTokens; 这是我到目前为止构建的代码片段: using (StreamReader oSR = File.OpenText(strInput)) { using (var reader = new JsonTextReader(oSR)) { while […]

用json.net解析嵌套的json

我有json反序列化的问题,下面是我的json { “_id” : ObjectId(“56bc28c436b252c406a67f17”), “empname”: “dhiraj”, “empcode”: “123a”, “level”: { “levelID”: 3, “levelDescription”: “manager”, “levelCode”: “mg” }, “Address”: [ { “Home”: { “streetname”: “Home”, “city”: “bbb”, “state”: “aaa” } }, { “Office”: { “streetname”: “ofc”, “city”: “ccc”, “state”: “ddd” } } ] } 对于上面的json,对象类就像 public class Employee { public ObjectId _id { get; private […]