Tag: json.net

如何使用json.net进行json的递归下降?

我试图使用json.net解析一个json文件。 该文件看起来像这样 {X: { Title:”foo”, xxxx:xxxx } } {Y: {ZZ: {Title: “bar”,…} } } 我试图通过Title属性递归处理所有对象的结构。 但我对JToken , JProperty , JContainer , JValue , JObject感到困惑。 阅读源代码并没有让我更加明智,也没有任何样本有帮助。 我想要一些东西 WalkNode(node, Action action) { foreach(var child in node.Children) { Action(child); WalkNode(child); } } Parse() { WalkNode(root, n=> { if(n[“Title”] != null) { … } }); }

在.NET中序列化大量链接的数据(自定义JSON.NET引用)

我希望在序列化数据时避免重新发明轮子。 我知道一些方法来序列化彼此链接的对象,但它的范围从编写一些代码到编写大量代码进行序列化,我想避免这种情况。 必须有一些通用的解决方案。 假设我有这样的结构: Person bro = new Person { name = “bro”, pos = new Pos { x = 1, y = 5 } }, sis = new Person { name = “sis”, pos = new Pos { x = 2, y = 6 } }, mom = new Person { name = “mom”, […]

无法使用Json.NET正确转换为json的枚举

我有一个枚举: public enum Animal { Dog, Cat, BlackBear } 我需要将它发送到第三方API。 此API要求我发送的枚举值为小写,偶尔需要下划线。 通常,它们所需的名称与我使用的枚举命名约定不匹配。 使用https://gooddevbaddev.wordpress.com/2013/08/26/deserializing-c-enums-using-json-net/中提供的示例,我尝试使用自定义JsonConverter: public class AnimalConverter : JsonConverter { public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { var animal = (Animal)value; switch (animal) { case Animal.Dog: { writer.WriteValue(“dog”); break; } case Animal.Cat: { writer.WriteValue(“cat”); break; } case Animal.BlackBear: { writer.WriteValue(“black_bear”); break; } } […]

C#类如何处理JSON中的美元符号?

我从Google的数据API获取JSON提要,许多属性名称以$字符(美元符号)开头。 我的问题是我不能创建一个带有以美元符号开头的变量名的C#类,语言不允许这样做。 我正在使用Newtonsoft的JSON.NET将JSON转换为C#对象。 我怎样才能解决这个问题?

Json.Net PopulateObject – 基于ID更新列表元素

可以定义用于JsonConvert.PopulateObject方法的自定义“list-merge”startegy吗? 例: 我有两个型号: class Parent { public Guid Uuid { get; set; } public string Name { get; set; } public List Childs { get; set; } } class Child { public Guid Uuid { get; set; } public string Name { get; set; } public int Score { get; set; } } 我最初的JSON: { […]

Newtonsoft.JSON v9.01 + FileNotFoundException(.NET核心类库)

(VS2015更新3 +补丁) 我有一个简单的.NET控制台应用程序(.NET 4.6)并引用了一个针对NetStandard v1.3的.NET核心类库。 类库引用了Newtonsoft.JSON。 { “version”: “1.0.0-*”, “dependencies”: { “NETStandard.Library”: “1.6.0”, “Newtonsoft.Json”: “9.0.1” }, “buildOptions”: { “platform”: “anycpu” }, “frameworks”: { “netstandard1.3”: { “imports”: “dnxcore50” } } } 引用的NewtonSoft.JSON包在此处部署: C:\用户\ UserAccount \ .nuget \包\ Newtonsoft.Json \ 9.0.1 例外情况: DotNetConsoleApplication.exe中发生未处理的“System.IO.FileNotFoundException”类型exception 附加信息:无法加载文件或程序集’Newtonsoft.Json,Version = 9.0.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed’或其依赖项之一。 该系统找不到指定的文件。 我想.net核心lib会引用netstandard1.0文件夹中的dll。

在Json.net中获取错误“无法在Newtonsoft.Json.Linq.JProperty中添加或删除项”

所以我试图通过将json对象作为JObject读取,删除一些字段,然后使用Json.Net将其再次反序列化为我的目标对象来控制反序列化 。 问题是,每次我尝试删除字段时,都会收到错误: Newtonsoft.Json.dll中出现未处理的“Newtonsoft.Json.JsonException”类型exception 其他信息:无法添加或删除Newtonsoft.Json.Linq.JProperty中的项目。 这是我的(简化但仍然导致错误)代码: JToken token = (JToken)JsonConvert.DeserializeObject(File.ReadAllText(fileName)); foreach (JToken inner in token[“docs”]) { if (inner[“_id”] != null) inner[“_id”].Remove(); MyObject read = new MyObject(); JsonConvert.PopulateObject(inner.ToString(), read); Values.Add((MyObject)JsonConvert.DeserializeObject(inner.ToString(), typeof(MyObject))); } json是一个非常大的文件,其中docs数组包含许多元素,如下所示(为简洁起见,再次简化): { “docs”: [ { “Time”: “None”, “Level”: 1, “_id”: “10208” }, { “Time”: “None”, “Level”: 1, “_id”: “10209” } ] } 或者,如果有更好的方法将JSON反序列化为特定类型,但仍然忽略其他字段,那将是一个很好的选择。

从JsonReader读取JObject时出错。 当前的JsonReader项不是对象:StartArray。 路径

我正在开发涉及位置的Windows Phone 8.1应用程序。 我从我的API接收Json数据。 我的API返回的数据如下所示: [{ “country”: “India”, “city”: “Mall Road, Gurgaon”, “area”: “Haryana”, “PLZ”: “122002”, “street”: “”, “house_no”: “”, “POI”: “”, “type”: “17”, “phone”: “”, “lng”: 77.08972334861755, “lat”: 28.47930118040612, “formatted_address”: “Mall Road, Gurgaon 122002, Haryana, India” }, { “country”: “India”, “city”: “Mall Road, Kanpur”, “area”: “Uttar Pradesh”, “PLZ”: “208004”, “street”: “”, “house_no”: “”, “POI”: […]

你如何“真正”使用Newtonsoft.Json序列化循环引用对象?

我在使用Newtonsoft.Json从我的ASP.NET Web API控制器正确地序列化数据时遇到问题。 这就是我的想法 – 如果我错了,请纠正我。 在某些情况下(特别是当数据中没有任何循环引用时)一切都像您期望的那样工作 – 填充对象列表被序列化并返回。 如果我在模型中引入导致循环引用的数据(如下所述,甚至设置了PreserveReferencesHandling.Objects ),则只有通过循环引用导致第一个对象的列表元素才能以客户端可以“序列化”的方式进行序列化。与“合作”。 如果在将数据发送到序列化程序之前以不同方式排序,则“导致数据”的元素可以是数据中的任何元素,但至少有一个元素将以客户端可以“使用”的方式进行序列化。 空对象最终被序列化为Newtonsoft引用( {$ref:X} )。 例如,如果我有一个EF模型,其导航属性如下所示: 在我的global.asax中: var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter; json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects; 这是我使用Entity Framework进行的基本查询(延迟加载已关闭,因此这里没有任何代理类): [HttpGet] [Route(“starting”)] public IEnumerable GetStartingBalances() { using (MyContext db = new MyContext()) { var data = db.Balances .Include(x => x.Source) .Include(x => x.Place) .ToList() return data; } } 到目前为止一直很好, […]

使用带有ItemRequired = Required.Always的Json.Net进行反序列化时忽略属性

我正在使用Json.Net将类序列化和反序列化为json和back。 我添加了一个标有[JsonObject(ItemRequired = Required.Always)] (或Required.Always )的类,这是一个新的get-only属性。 这导致以下JsonSerializationException : Newtonsoft.Json.JsonSerializationException:在JSON中找不到必需属性” 我认为用JsonIgnore标记该属性可以解决问题,但这不起作用。 如何告诉Json.Net应忽略此属性? 这是一个重现问题的最小例子: [JsonObject(ItemRequired = Required.Always)] public class Hamster { public string FirstName { get; set; } public string LastName { get; set; } [JsonIgnore] public string FullName { get { return FirstName + LastName; }} } private static void Main() { var hamster = new […]