Tag: json.net

重复序列化和反序列化会创建重复项

大家好我的json serealization问题。 我在Unity下使用Json.NET包:我正在搜索一个数据库,可以在我的应用程序上编辑,并通过wwwForm和一个php文件存储在我的服务器上。 我没有问题来创建它并将其推到网上。 问题是,当我加载它时,数据库最后有一个新条目。 数据库类是这样的: public class Database { public List armies { get; set;} public Database() { armies = new List(); armies.Add (new Army()); } } public class Army { public string faction { get; set;} public List army { get; set;} public Army() { faction = “RED”; army = new List(); army.Add […]

如何访问JArray的元素

我有以下Json从Twitter获得 + token {[ { “trends”: [ { “name”: “Croke Park II”, “url”: “http://twitter.com/search?q=%22Croke+Park+II%22”, “promoted_content”: null, “query”: “%22Croke+Park+II%22”, “events”: null }, { “name”: “#twiznight”, “url”: “http://twitter.com/search?q=%23twiznight”, “promoted_content”: null, “query”: “%23twiznight”, “events”: null }, { “name”: “#Phanhattan”, “url”: “http://twitter.com/search?q=%23Phanhattan”, “promoted_content”: null, “query”: “%23Phanhattan”, “events”: null }, { “name”: “#VinB”, “url”: “http://twitter.com/search?q=%23VinB”, “promoted_content”: null, “query”: “%23VinB”, “events”: […]

处理Newtonsoft.Json中的十进制值

我有一个MVC应用程序,我在其中处理一些JSON。 这很简单。 我在ModelBinder中有这么简单的代码: return JsonConvert.DeserializeObject(jsonString, bindingContext.ModelType, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, MissingMemberHandling = MissingMemberHandling.Ignore, Formatting = Formatting.None, DateFormatHandling = DateFormatHandling.IsoDateFormat, FloatParseHandling = FloatParseHandling.Decimal }); 它完美无瑕。 好吧,有点。 假设我有这个课程: public class MyClass { public decimal MyProp { get; set; } } 如果我尝试反序列化这个json: “{\”MyProp\”: 9888.77}” 当然它可以工作,因为9888.77是一个Javascript浮点值。 我认为。 但是我的页面中有一个屏蔽输入,使得JSON看起来像这样(对不起我的英文): “{\”MyProp\”: \”9.888,77\” }” AAAND,它失败了。 它说它Could not convert string to […]

如何使JSON.NET忽略对象关系?

我正在开发一个Entity Framework项目。 我想序列化一堆实体类实例。 我将它们绑定到一个容器类中: public class Pseudocontext { public List widgets; public List things; Etcetera ……这是我正在尝试序列化的这个类的一个实例。 我希望JSON.NET序列化每个实体类实例的成员,这些实体实际上是底层数据库中的列。 我不希望它甚至尝试序列化对象引用。 特别是,我的实体类有虚拟成员,允许我编写C#代码,导航我所有的实体间关系,而不用担心实际的键值,连接等,我希望JSON.NET忽略我的实体的相关部分类。 从表面上看,似乎有一个JSON.NET配置选项完全正如我所说: JsonSerializer serializer = new JsonSerializer(); serializer.PreserveReferencesHandling = PreserveReferencesHandling.None; 不幸的是,JSON.NET似乎忽略了上面的第二个声明。 我实际上找到了一个网页( http://json.codeplex.com/workitem/24608 ),其他人将同样的问题提请James Newton-King本人注意,他的回答(完整的)是“写一个定制合同解析员。“ 尽管我发现答案是不合适的,但我一直试图遵循其指导。 我非常希望能够编写一个“契约解析器”,它忽略除了原始类型,字符串,DateTime对象和我自己的Pseudocontext类以及它直接包含的列表之外的所有内容。 如果某人有一个至少类似的东西的例子,那可能就是我所需要的。 这就是我自己提出的: public class WhatDecadeIsItAgain : DefaultContractResolver { protected override JsonContract CreateContract(Type objectType) { JsonContract contract = base.CreateContract(objectType); if (objectType.IsPrimitive […]

访问JTOKEN,json.net中的所有项目

我有一个像这样的json块: { “ADDRESS_MAP”:{ “ADDRESS_LOCATION”:{ “type”:”separator”, “name”:”Address”, “value”:””, “FieldID”:40 }, “LOCATION”:{ “type”:”locations”, “name”:”Location”, “keyword”:{ “1”:”LOCATION1″ }, “value”:{ “1”:”United States” }, “FieldID”:41 }, “FLOOR_NUMBER”:{ “type”:”number”, “name”:”Floor Number”, “value”:”0″, “FieldID”:55 }, “self”:{ “id”:”2″, “name”:”Address Map” } } } 如何获取此令牌包含的所有关键项。 例如,从上面的代码我想要“ADRESS_LOCATION”,“LOCATION”,“FLOOR_NUMBER”和“self”。 谢谢

如何更改数字反序列化的默认类型?

我将一些属性反序列化为Dictionary 。 当我反序列化一些json时,它用Int64对象而不是Int32填充Dictionary 。 我希望它选择Int32作为默认,知道我可以有转换溢出的javascript数字。 在这种情况下抛出exception是完全可以接受的。 有没有办法实现这一目标? 我希望有一些很好的属性或一个方便的接口,可以实现并添加到JsonSerializer 。 而且我担心我必须深入到Json.NET的深处。 基本上我想有一些方法来控制对象的已知类型,以便我可以获得Int32而不是Int64和DateTimes而不是Strings 。

在Json.NET序列化中有没有办法区分“null因为不存在”和“null因为null”?

我正在使用ASP.NET webapi代码库,我们在很大程度上依赖于通过JSON.NET自动支持将消息体的JSON反序列化为.NET对象。 作为构建我们的一个资源的补丁支持的一部分,我非常希望区分JSON对象中不存在的可选属性与明确为null的相同属性。 我的意图是使用第一个“不要改变那里有什么”与“删除这个东西”。 有没有人知道是否有可能标记我的C#DTO,这样当它们被反序列化时,JSON.NET可以告诉我它是哪种情况? 现在他们只是空出来,我不知道为什么。 相反,如果有人能够提出一个更好的设计,不需要我这样做,同时仍然支持补丁动词,我很想听听你的建议。 作为一个具体的例子,考虑将传递给put的这个有效负载: { “field1”: “my field 1”, “nested”: { “nested1”: “something”, “nested2”: “else” } } 现在,如果我只想更新field1,我应该能够将其作为HTTP补丁发送: { “field1”: “new field1 value” } 并且嵌套值将保持不变。 但是,如果我发送了这个: { “nested”: null } 我想知道这意味着我应该明确删除嵌套数据。

JSON中的ASP.NET Web API日期格式未成功序列化

所有, 我们正在使用ASP.NET Web API,我们有一个基于REST的服务,其中包含有效负载的JSON。 如果我将以下日期作为字符串传递,例如 sampleObj: { … myDate: “31/12/2011 00:00:00”, … } 作为JSON有效内容中的属性值,date属性被反序列化为DateTime.MinValue。 字符串格式有效吗? 我们知道格式“2012-10-17 07:45:00”成功序列化,但我们不能保证收到的所有日期都是这种格式。 有效的选择是什么?

如何使用NewtonSoft JsonConvert在其名称中用短划线(“ – ”)反序列化属性?

我们有一个JSON对象,其中一个对象的名称中包含一个破折号。 在下面。 { “veg”: [ { “id”: “3”, “name”: “Vegetables”, “count”: “25” }, { “id”: “4”, “name”: “Dal”, “count”: “2” }, { “id”: “5”, “name”: “Rice”, “count”: “8” }, { “id”: “7”, “name”: “Breads”, “count”: “6” }, { “id”: “9”, “name”: “Meals”, “count”: “3” }, { “id”: “46”, “name”: “Extras”, “count”: “10” } ], “non-veg”: […]

IEnumerable中每个项目的自定义json序列化

我正在使用Json.NET来序列化具有枚举和DateTime的IEnumerable的对象。 它是这样的: class Chart { // … public IEnumerable YAxis { get; set; } public IEnumerable Data { get; set; } public IEnumerable XAxis { get; set; } } 但我需要一个自定义的JsonConverter来使枚举序列化为字符串并更改DateTime字符串格式。 我已经尝试使用这里提到的JsonConverter属性用于枚举和自定义IsoDateTimeConverter如下所示: [JsonConverter(typeof(StringEnumConverter))] public IEnumerable Data { get; set; } [JsonConverter(typeof(MyDateTimeConverter))] public IEnumerable XAxis { get; set; } 我希望它也适用于IEnumerable ,但不出所料,它不会: 无法将类型为’WhereSelectArrayIterator`2 [System.Int32,Model.State]’的对象强制转换为’System.Enum’。 有没有办法说JsonConverterAttribute适用于每个项目而不是可枚举本身?