Tag: json.net

NewtonSoft.Json自定义JsonConverter反序列化为DateTime不起作用

我试图将Unix timestamp反序列化为DateTime 。 在我的情况下,我需要做更多的检查才能从时间戳设置属性到DateTime。 如果我使用Newtonsoft.Json DateTime ,它将它反序列化为UTC时间,我需要将其反序列化为特定的时区 问题是我无法得到正确的时间。 似乎我的字符串long解析失败了。 如果我可以得到long unix时间戳,我可以让其余的逻辑工作 我有一个名为Alert的课程 class Alert { // Some properties [JsonConverter(typeof(UnixTimestampJsonConverter))] public DateTime Created { get; set; } // Some more properties } UnixTimestampJsonConverter类是 class UnixTimestampJsonConverter : JsonConverter { // Other override methods public override object ReadJson (JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if […]

Json.Net在序列化时弄乱了DateTimeOffset的时区

我看过很多相关的问题,但似乎没有一个问题适合我。 我正在尝试序列化UTC中的所有内容。 这是我的代码: class Class1 { static void Main() { Class2 foo = new Class2(); JObject json = JObject.Parse(JsonConvert.SerializeObject(foo, new JsonSerializerSettings() { DateParseHandling = DateParseHandling.DateTimeOffset, DateFormatHandling = DateFormatHandling.IsoDateFormat, DateTimeZoneHandling = DateTimeZoneHandling.Utc })); Console.WriteLine(json.ToString()); Console.Read(); } } class Class2 { public DateTimeOffset time = new DateTimeOffset(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddTicks(14663484000000000)); public DateTimeOffset time2 […]

Json.Net基于值选择对象

我有一个看起来像这样的Json对象: { wvw_matches: [ { wvw_match_id: “1-4”, red_world_id: 1011, blue_world_id: 1003, green_world_id: 1002, start_time: “2013-09-14T01:00:00Z”, end_time: “2013-09-21T01:00:00Z” }, { wvw_match_id: “1-2”, red_world_id: 1017, blue_world_id: 1021, green_world_id: 1009, start_time: “2013-09-14T01:00:00Z”, end_time: “2013-09-21T01:00:00Z” } ] } 它包含的数组中的对象比上面显示的示例多得多。 无论如何,我需要根据wvw_match_id选择Json对象。 我怎么做到这一点? 🙂

从json反序列化可以将单个T对象或T数组转换为List

我有这样的代码: var json = GetJsonData(path); JObject event_dates_data = JObject.Parse(json); var event_dates_list = JObject.Parse(event_dates_data[“document”][“date”].ToString()); var event_dates = JsonConvert.DeserializeObject<List>(event_dates_list.ToString()); Json可能包含一个数组对象(例如“date:[{},{},{}]”)或只包含一个(例如“date:{}”) Json看起来像这样: { “document”: { “result”: “success”, “resultcode”: “000000”, “note”: null, “totaldates”: “1”, “date”: { “date_id”: “351314”, “live”: “n”, “datestart”: “2012-03-07”, “dateend”: “2015-03-07”, “timestart”: “12:00”, “timeend”: “14:00”, “date_available”: “10000” } } } 要么: { “document”: { “result”: “success”, […]

使用Linq在json.net中获取JObject的名称

我有一个JObject等于: “Info”: { “View”:”A”, “Product”:”B”, “Offer”:”Offer1″, “Demo”:”body {background-color:red;} #box {border:dotted 50px red;}”, “Log”:false } 如何返回对象的名称“Info”? 我目前正在使用Path属性,如下所示: jObject.Name = jObject.Path.Substring(jObject.Path.jObject(‘.’) + 1); 有一个更好的方法吗?

c#和newtonsoft中的JSON Date和DateTime序列化

我们将JSON发送到由swagger定义的API,其中一些属性是DateTime,格式为yyyy-MM-ddThh:mm:ss.000Z(毫秒必须是3位数或者在端点处validation失败),有些属于Date(否)时间)属性。 我看到许多消息说使用这样的格式化程序: var jsonSettings = new JsonSerializerSettings(); jsonSettings.DateFormatString = “yyyy-MM-ddThh:mm:ss.000Z”; //try .fffZ too var jsonObject= Newtonsoft.Json.JsonConvert.DeserializeObject(json , setting); 但这不会将DateTimes转换为正确的格式,C#如何处理仅Date类型? 它似乎总是序列化为DateTime.MinValue() 这是一个例子: 有人将json作为字符串发送给我,但日期和日期时间以不正确的格式发送给端点。 我希望swagger类和json反序列化可以格式化它们,但事实并非如此。 这是招摇的生成类 public class OurSwaggerObject { [Newtonsoft.Json.JsonProperty(“dateTimeField”, Required = Newtonsoft.Json.Required.Always)] [System.ComponentModel.DataAnnotations.Required] [System.ComponentModel.DataAnnotations.RegularExpression(@”^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d\.\d{3}Z$”)] public DateTime dateTimeField { get; set; } [Newtonsoft.Json.JsonProperty(“dateField”, Required = Newtonsoft.Json.Required.Always)] [System.ComponentModel.DataAnnotations.Required] [System.ComponentModel.DataAnnotations.RegularExpression(@”^\d{4}-\d\d-\d\d$”)] public DateTime dateField { get; set; } } […]

序列化名为“return”的JSON对象

我正在尝试编写针对Mt Gox的Http API的股票代码。 它返回如下所示的JSON: { “result”:”success”, “return”: { “high”: {“value”:”5.70653″,”value_int”:”570653″,”display”:”$5.70653″,”currency”:”USD”}, “low”: {“value”:”5.4145″,”value_int”:”541450″,”display”:”$5.41450″,”currency”:”USD”}, “avg”: {“value”:”5.561119626″,”value_int”:”556112″,”display”:”$5.56112″,”currency”:”USD”}, “vwap”: {“value”:”5.610480461″,”value_int”:”561048″,”display”:”$5.61048″,”currency”:”USD”}, “vol”: {“value”:”55829.58960346″,”value_int”:”5582958960346″,”display”:”55,829.58960346\u00a0BTC”,”currency”:”BTC”}, “last_all”:{“value”:”5.5594″,”value_int”:”555940″,”display”:”$5.55940″,”currency”:”USD”}, “last_local”:{“value”:”5.5594″,”value_int”:”555940″,”display”:”$5.55940″,”currency”:”USD”}, “last_orig”:{“value”:”5.5594″,”value_int”:”555940″,”display”:”$5.55940″,”currency”:”USD”}, “last”:{“value”:”5.5594″,”value_int”:”555940″,”display”:”$5.55940″,”currency”:”USD”}, “buy”:{“value”:”5.53587″,”value_int”:”553587″,”display”:”$5.53587″,”currency”:”USD”}, “sell”:{“value”:”5.56031″,”value_int”:”556031″,”display”:”$5.56031″,”currency”:”USD”} } } 我正在尝试将该信息转换为对象。 我创建了一组看起来像这样的类: [DataContract] class MtGoxResponse { public string result { get; set; } [DataMember(Name=”return”)] public Resp Resp { get; set; } } [DataContract] class Resp { public HLA high […]

JSON.NET:如何序列化嵌套集合

这让我疯了……我正在使用Json.net将List序列化为JSON。 我期待这个JSON: { “fieldsets”: [ { “properties”: [ { “alias”: “date”, “value”: “2014-02-12T00:00:00” }, { “alias”: “time”, “value”: null } ], “alias”: “eventDates”, “disabled”: false } ] } 但相反,我得到了这个: { “fieldsets”: [ { “properties”: [ { “values”: [ { “alias”: “date”, “value”: “2014-07-13T00:00:00” }, { “alias”: “time”, “value”: “Registration begins at 8:00 AM; walk begins […]

将JSON反序列化为Object时出错

我需要转换从REST API获取的JSON数据,并将它们转换为CSV以进行某些分析。 问题是JSON数据不一定遵循相同的内容,因此我无法定义映射类型。 这已经成为一项挑战,占用了我太多的时间。 我已经创建了一些代码,但当然它不起作用,因为它会抛出exception var data = JsonConvert.DeserializeObject<List>(jsonData); 错误是: 附加信息:无法将当前JSON对象(例如{“name”:“value”})反序列化为类型’System.Collections.Generic.List`1 [System.Object]’,因为该类型需要JSON数组(例如[1] ,2,3]正确反序列化。 要修复此错误,请将JSON更改为JSON数组(例如[1,2,3])或更改反序列化类型,使其成为普通的.NET类型(例如,不是像整数这样的基本类型,而不是类似的集合类型可以从JSON对象反序列化的数组或List。 JsonObjectAttribute也可以添加到类型中以强制它从JSON对象反序列化。 路径’数据’,第2行,第10位。 请让我知道我能做些什么才能实现这一目标。 数据样本就是这样,数据字段可以经常更改,例如可以在第二天添加新字段,因此我没有自由创建.Net类来映射数据。 { “data”: [ { “ID”: “5367ab140026875f70677ab277501bfa”, “name”: “Happiness Initiatives – Flow of Communication/Process & Efficiency”, “objCode”: “PROJ”, “percentComplete”: 100.0, “plannedCompletionDate”: “2014-08-22T17:00:00:000-0400”, “plannedStartDate”: “2014-05-05T09:00:00:000-0400”, “priority”: 1, “projectedCompletionDate”: “2014-12-05T08:10:21:555-0500”, “status”: “CPL” }, { “ID”: “555f452900c8b845238716dd033cf71b”, “name”: “UX Personalization Think […]

如何配置JSON.net反序列化器来跟踪缺失的属性?

样本类: public class ClassA { public int Id { get; set; } public string SomeString { get; set; } public int? SomeInt { get; set; } } 默认反序列化器: var myObject = JsonConvert.DeserializeObject(str); 为两个不同的输入创建相同的对象 {“Id”:5} 要么 {“Id”:5,”SomeString”:null,”SomeInt”:null} 如何跟踪反序列化过程中丢失的属性并保留相同的行为? 有没有办法覆盖一些JSON.net序列化方法(例如DefaultContractResolver类方法)来实现这一点。 例如: List missingProps; var myObject = JsonConvert.DeserializeObject(str, settings, missingProps); 对于第一个输入列表,应包含缺少的属性的名称(“SomeString”,“SomeInt”),对于第二个输入,它应该为空。 反序列化的对象保持不变。