public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { string displayName = string.Empty; string address = string.Empty; while (reader.Read()) { var tokenType = reader.TokenType; if (reader.TokenType == JsonToken.PropertyName) { var val = (reader.Value as string )?? string.Empty; if (val == "DisplayName") { displayName = reader.ReadAsString(); } if (val == "Address") { address = reader.ReadAsString(); } } if (reader.TokenType == JsonToken.EndObject) { break; } } var mailAddress = new MailAddress(address, displayName); return mailAddress; }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.Null) return null; reader.Assert(JsonToken.StartObject); string toString = null; string idObj = null; string typeStr = null; Entity entity = null; reader.Read(); while (reader.TokenType == JsonToken.PropertyName) { switch ((string)reader.Value) { case "toStr": toString = reader.ReadAsString(); break; case "id": idObj = reader.ReadAsString(); break; case "EntityType": typeStr = reader.ReadAsString(); break; case "entity": reader.Read(); entity = (Entity)serializer.Deserialize(reader, typeof(Entity)); break; default: throw new InvalidOperationException("unexpected property " + (string)reader.Value); } reader.Read(); } reader.Assert(JsonToken.EndObject); Type type = TypeLogic.GetType(typeStr); PrimaryKey? idOrNull = idObj == null ? (PrimaryKey?)null : PrimaryKey.Parse(idObj, type); if (entity == null) return Lite.Create(type, idOrNull.Value, toString); var result = entity.ToLiteFat(toString); if (result.EntityType != type) throw new InvalidOperationException("Types don't match"); if (result.IdOrNull != idOrNull) throw new InvalidOperationException("Id's don't match"); var existing = existingValue as Lite<Entity>; if (existing.Is(result) && existing.EntityOrNull == null && result.EntityOrNull != null) { existing.SetEntity(result.EntityOrNull); return existing; } return result; }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { Debugger.Break(); Source source = new Source(); source.Format = reader.ReadAsString(); source.Header = reader.ReadAsString(); source.Link = reader.ReadAsString(); return source; }
/// <summary> /// Reads the JSON representation of the object. /// </summary> public override object ReadJson( JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer ) { if( typeof( DataCharacteristic ) == objectType ) { var characteristic = new DataCharacteristic(); if( reader.Read() && reader.TokenType == JsonToken.PropertyName ) { characteristic.Uuid = new Guid( (string)reader.Value ); var valueAttributes = new System.Collections.Generic.List<DataService.Attribute>(); if( reader.Read() && reader.TokenType == JsonToken.StartObject ) { while( reader.Read() && reader.TokenType == JsonToken.PropertyName ) { var key = ushort.Parse( reader.Value.ToString(), System.Globalization.CultureInfo.InvariantCulture ); var value = reader.ReadAsString(); valueAttributes.Add( new DataService.Attribute( key, value ) ); } } characteristic.Value = new DataValue( valueAttributes.ToArray() ); } return characteristic; } else { var characteristics = new System.Collections.Generic.List<DataCharacteristic>(); while( reader.Read() && reader.TokenType == JsonToken.PropertyName ) { var characteristic = new DataCharacteristic(); characteristic.Uuid = new Guid( (string) reader.Value ); var valueAttributes = new System.Collections.Generic.List<DataService.Attribute>(); if( reader.Read() && reader.TokenType == JsonToken.StartObject ) { while( reader.Read() && reader.TokenType == JsonToken.PropertyName ) { var key = ushort.Parse( reader.Value.ToString(), System.Globalization.CultureInfo.InvariantCulture ); var value = reader.ReadAsString(); valueAttributes.Add( new DataService.Attribute( key, value ) ); } } characteristic.Value = new DataValue( valueAttributes.ToArray() ); characteristics.Add( characteristic ); } return characteristics.ToArray(); } }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if( reader.TokenType == JsonToken.Null ) { return null; } if( reader.TokenType != JsonToken.StartObject ) { var msg = string.Join(" ", $"The JSON representation of binary data (byte[]) when parsing the server response is not a {Converter.PseudoTypeKey}:{Converter.Binary} object.", $"This happens if your JSON document contains binary data (byte[]) in some other format (like a base64 string only) rather than a native RethinkDB pseudo type {Converter.PseudoTypeKey}:{Converter.Binary} object.", $"If you are overriding the default Ser/Deserialization process, you need to make sure byte[] is a native {Converter.PseudoTypeKey}:{Converter.Binary} objects before using the built-in {nameof(ReqlBinaryConverter)}.", "See https://rethinkdb.com/docs/data-types/ for more information about how binary data is represented in RethinkDB."); throw new JsonSerializationException(msg); } reader.ReadAndAssertProperty(Converter.PseudoTypeKey); var reql_type = reader.ReadAsString(); if( reql_type != Converter.Binary ) { throw new JsonSerializationException($"Expected {Converter.PseudoTypeKey} should be {Converter.Binary} but got {reql_type}."); } reader.ReadAndAssertProperty("data"); var data = reader.ReadAsBytes(); //realign and get out of the pseudo type //one more post read to align out of { reql_type:BINARY, data:""} reader.ReadAndAssert(); return data; }
//EXAMPLE: // "r": [ // { // "$reql_type$": "GROUPED_DATA", // "data": [ // [ // "Alice", // [ // { "id": 5, "player": "Alice", "points": 7, "type": "free"}, // { "id": 12, "player": "Alice", "points": 2, "type": "free" } // ] // ], // [ // "Bob", // [ // { "id": 2, "player": "Bob", "points": 15, "type": "ranked" }, // { "id": 11, "player": "Bob", "points": 10, "type": "free" } // ] // ] // ] // } // ] public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { reader.ReadAndAssertProperty(Converter.PseudoTypeKey); var reql_type = reader.ReadAsString(); if( reql_type != Converter.GroupedData ) { throw new JsonSerializationException($"Expected {Converter.PseudoTypeKey} should be {Converter.GroupedData} but got {reql_type}."); } reader.ReadAndAssertProperty("data"); //move reader to property value reader.ReadAndAssert(); //... probably find a better way to do this. var listType = typeof(List<>).MakeGenericType(objectType); var list = (IList)Activator.CreateInstance(listType); var data = serializer.Deserialize<List<JArray>>(reader); foreach( var group in data ) { var key = group[0]; //key, group value in common var items = group[1]; //the grouped items var grouping = Activator.CreateInstance(objectType, key, items); list.Add(grouping); } //.Select(arr => Activator.CreateInstance(objectType, arr) ).ToList(); return list; }
public static DubProjectConfiguration DeserializeFromPackageJson(JsonReader j) { var c = new DubProjectConfiguration { Name = "<Undefined>" }; var srz = new JsonSerializer(); while (j.Read() && j.TokenType != JsonToken.EndObject) { if (j.TokenType == JsonToken.PropertyName) { switch (j.Value as string) { case "name": c.Name = c.Id = j.ReadAsString(); break; case "platforms": j.Read(); c.Platform = string.Join("|",srz.Deserialize<string[]>(j)); break; default: if (!c.BuildSettings.TryDeserializeBuildSetting(j)) j.Skip(); break; } } } return c; }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var filter = new TermsQueryDescriptor<object>(); ITermsQuery f = filter; if (reader.TokenType != JsonToken.StartObject) return null; var depth = reader.Depth; while (reader.Read() && reader.Depth >= depth && reader.Value != null) { var property = reader.Value as string; switch (property) { case "boost": reader.Read(); f.Boost = reader.Value as double?; break; case "_name": f.Name = reader.ReadAsString(); break; default: f.Field = property; //reader.Read(); ReadTerms(f, reader, serializer); //reader.Read(); break; } } return filter; }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var str = string.Empty; if (reader.TokenType != JsonToken.Null && reader.TokenType == JsonToken.String) str = reader.ReadAsString(); return NamingConvention.FromString(str); }
/// <summary> /// Reads the JSON representation of the object. /// </summary> /// <param name="reader">The <see cref="Newtonsoft.Json.JsonReader"/> to read from.</param> /// <param name="objectType">The <see cref="System.Type"/> of the object.</param> /// <param name="existingValue">The existing value of object being read.</param> /// <param name="serializer">The calling serializer.</param> /// <returns>The object value.</returns> public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { switch(reader.TokenType) { case JsonToken.Integer: return new Contributors { Id = (long)reader.Value }; case JsonToken.StartObject: reader.Read(); var value = new Contributors(); while(reader.TokenType != JsonToken.EndObject) { if(reader.TokenType != JsonToken.PropertyName) throw new FormatException("The format of this object is wrong"); switch((string)reader.Value) { case "id": value.Id = (long)reader.ReadAsDecimal(); break; case "screen_name": value.ScreenName = reader.ReadAsString(); break; default: reader.Read(); break; } reader.Read(); } return value; } throw new InvalidOperationException("This object is not a Contributors"); }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.String) { return new AssemblyName(reader.ReadAsString()); } return null; }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer) { var result = new TwitterRateLimitStatusSummary(); reader.Read(); reader.Read(); reader.Read(); result.AccessToken = reader.ReadAsString(); // access_token return result; }
public override object ReadJson( JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var webColorString = reader.ReadAsString(); return new WebColor(webColorString); }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var s = reader.ReadAsString(); switch(s) { case "keep": return ReindexRouting.Keep; case "discard": return ReindexRouting.Discard; default: return new ReindexRouting(s); } }
/// <summary> /// Read /// </summary> /// <param name="reader"></param> /// <param name="objectType"></param> /// <param name="existingValue"></param> /// <param name="hasExistingValue"></param> /// <param name="serializer"></param> /// <returns></returns> public override PhysicalAddress ReadJson(JsonReader reader, Type objectType, PhysicalAddress existingValue, bool hasExistingValue, JsonSerializer serializer) { var str = reader.ReadAsString(); if (string.IsNullOrEmpty(str)) { return(PhysicalAddress.None); } return(PhysicalAddress.Parse(str)); }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { //reader.Read(); var obj = new Filter(); obj.Name = reader.ReadAsString(); obj.Count = reader.ReadAsInt32().GetValueOrDefault(); reader.Read(); return obj; }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.TokenType != JsonToken.StartArray) return null; var fields = new Fields(); while (reader.TokenType != JsonToken.EndArray) { var field = reader.ReadAsString(); if (reader.TokenType == JsonToken.String) fields.And(field); } return fields; }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var o = new CatFielddataRecord() { FieldSizes = new Dictionary<string, string>() }; while (reader.Read()) { var prop = reader.Value as string; if (prop == null) return o; switch (prop) { case "id": o.Id = reader.ReadAsString(); continue; case "node": case "n": o.Node = reader.ReadAsString(); continue; case "host": o.Host = reader.ReadAsString(); continue; case "ip": o.Ip = reader.ReadAsString(); continue; case "total": o.Total = reader.ReadAsString(); continue; default: var value = reader.ReadAsString(); o.FieldSizes[prop] = value; continue; } } return o; }
public IConfigureCloudQueueMessageEnvelope Read(JsonReader reader) { if (reader == null) throw new ArgumentNullException("reader"); IConfigureCloudQueueMessageEnvelope envelope = new CloudQueueMessageEnvelope(); reader.Read(); //StartObject reader.Read(); //PropertyName:From envelope = envelope.SetFrom(reader.ReadAsString()); //String:From value reader.Read(); //PropertyName:To envelope = envelope.SetTo(reader.ReadAsString()); //String:To value reader.Read(); //PropertyName:MessageId envelope = envelope.SetMessageId(new Guid(reader.ReadAsString())); //String:MessageId value reader.Read(); if (((string)reader.Value) == "RelatesToMessageId") //PropertyName:Possibly RelatesToMessageId { envelope = envelope.SetRelatesToMessageId(new Guid(reader.ReadAsString())); reader.Read(); //PropertyName:CorrelationId } envelope = envelope.SetCorrelationId(new Guid(reader.ReadAsString())); //String:CorrelationId value reader.Read(); //PropertyName:ContentType envelope = envelope.SetContentType(reader.ReadAsString()); //String:ContentType value reader.Read(); //PropertyName:Content envelope = envelope.SetContent(reader.ReadAsBytes()); //String:Content value reader.Read(); //PropertyName:Time envelope = envelope.SetTime(reader.ReadAsDateTimeOffset().GetValueOrDefault()); //String:Time value reader.Read(); //EndObject return envelope; }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var record = new CatFielddataRecord(); while (reader.Read()) { var prop = reader.Value as string; if (prop == null) return record; switch (prop) { case "id": record.Id = reader.ReadAsString(); continue; case "node": case "n": record.Node = reader.ReadAsString(); continue; case "host": record.Host = reader.ReadAsString(); continue; case "ip": record.Ip = reader.ReadAsString(); continue; case "field": record.Field = reader.ReadAsString(); continue; case "size": record.Size = reader.ReadAsString(); continue; } } return record; }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.TokenType != JsonToken.StartArray) return null; var types = new List<TypeName> { }; while (reader.TokenType != JsonToken.EndArray) { var type = reader.ReadAsString(); if (reader.TokenType == JsonToken.String) types.Add(type); } return new Types(types); }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var bsonReader = reader as BsonReader; if (bsonReader == null) { return new ObjectId(reader.ReadAsString()); } else { var bytes = bsonReader.ReadAsBytes(); return new ObjectId(bytes); } }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var data = reader.ReadAsString(); try { return(data.Split(',').Select(it => (TEnum)Enum.Parse(typeof(TEnum), it)).ToHashSet()); } catch { Debug.LogError($"Incorrect data: {data}"); return(new HashSet <TEnum>()); } }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { Uri uri; var value = reader.ReadAsString(); if (Uri.TryCreate(value, UriKind.RelativeOrAbsolute, out uri)) { return new FileToSend(uri); } else { return new FileToSend(value); } }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if( reader.TokenType == JsonToken.Null ) { return null; } if( reader.TokenType != JsonToken.StartObject ) { var msg = string.Join(" ", $"The JSON representation of a DateTime/DateTimeOffset when parsing the server response is not a {Converter.PseudoTypeKey}:{Converter.Time} object.", $"This happens if your JSON document contains DateTime/DateTimeOffsets in some other format (like an ISO8601 string) rather than a native RethinkDB pseudo type {Converter.PseudoTypeKey}:{Converter.Time} object.", $"If you are overriding the default Ser/Deserialization process, you need to make sure DateTime/DateTimeOffset are native {Converter.PseudoTypeKey}:{Converter.Time} objects before using the built-in {nameof(ReqlDateTimeConverter)}.", "See https://rethinkdb.com/docs/data-types/ for more information about how Date and Times are represented in RethinkDB."); throw new JsonSerializationException(msg); } reader.ReadAndAssertProperty(Converter.PseudoTypeKey); var reql_type = reader.ReadAsString(); if( reql_type != Converter.Time ) { throw new JsonSerializationException($"Expected {Converter.PseudoTypeKey} should be {Converter.Time} but got {reql_type}."); } reader.ReadAndAssertProperty("epoch_time"); var epoch_time = reader.ReadAsDouble(); if( epoch_time == null ) { throw new JsonSerializationException($"The {Converter.PseudoTypeKey}:{Converter.Time} object doesn't have an epoch_time value."); } reader.ReadAndAssertProperty("timezone"); var timezone = reader.ReadAsString(); //realign and get out of the pseudo type //one more post read to align out of { reql_type:TIME, .... } reader.ReadAndAssert(); if( objectType == typeof(DateTimeOffset) || objectType == typeof(DateTimeOffset?) ) { return ConvertDateTimeOffset(epoch_time.Value, timezone); } else { return ConvertDateTime(epoch_time.Value, timezone, serializer.DateTimeZoneHandling); } }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var jObject = JObject.Parse(reader.ReadAsString()); try { var res = new Dictionary <NoteType, T>(); foreach (var type in (NoteType[])Enum.GetValues(typeof(NoteType))) { res[type] = serializer.Deserialize <T>(jObject.GetValue(((int)type).ToString()).CreateReader()); } return(res); } catch { Debug.LogError($"Incorrect data: {jObject}"); return(new Dictionary <NoteType, T>()); } }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var value = reader.ReadAsString(); if (value == null) { ThrowInvalidFormatException(); } var match = Regex.Match(value, @"^([a-zA-Z0-9]+)\[([a-zA-Z0-9]+)\]$"); if (!match.Success) { ThrowInvalidFormatException(); } if (existingValue == null) { existingValue = new HtmlTagAttributePair(); } var pair = (HtmlTagAttributePair) existingValue; pair.TagName = match.Groups[1].Value; pair.AttributeName = match.Groups[2].Value; return pair; }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var o = new CatThreadPoolRecord(); while (reader.Read()) { var prop = reader.Value as string; if (prop == null) return o; switch (prop) { case "id": case "nodeId": o.Id = reader.ReadAsString(); continue; case "pid": case "p": o.Pid = reader.ReadAsString(); continue; case "host": case "h": o.Host = reader.ReadAsString(); continue; case "ip": case "i": o.Ip = reader.ReadAsString(); continue; case "port": case "po": o.Port = reader.ReadAsString(); continue; default: var threadPoolField = GetThreadPoolAndField(prop); if (threadPoolField == null) continue; string threadPool = threadPoolField.Item1, field = threadPoolField.Item2; var value = reader.ReadAsString(); SetThreadPool(threadPool, o, field, value); continue; } } return o; }
private static ApiErrorException ParseError(JsonReader jsonReader) { var error = new ApiErrorException(); while (jsonReader.Read()) { if (jsonReader.TokenType == JsonToken.PropertyName) { switch ((string)jsonReader.Value) { case "message": error.ErrorMessage = jsonReader.ReadAsString(); break; case "stack": error.ErrorStackTrace = jsonReader.ReadAsString(); break; case "type": error.ErrorType = jsonReader.ReadAsString(); break; default: jsonReader.Skip(); break; } } } return error; }
private object Deserialize(Type objectType, JsonReader reader, object obj = null) { object retval = obj == null ? Activator.CreateInstance(objectType) : obj; if (reader.TokenType != JsonToken.StartObject) throw new JsonReaderException(String.Format("Expected JsonToken.StartObject, got {0}", reader.TokenType.ToString())); reader.Read(); // Burn the StartObject token do { if (reader.TokenType == JsonToken.PropertyName) { string value = (string)reader.Value; var modelProperty = _modelManager.GetPropertyForJsonKey(objectType, value); if (value == RelationshipsKeyName) { // This can only happen within a links object reader.Read(); // burn the PropertyName token //TODO: linked resources (Done??) DeserializeLinkedResources(retval, reader); } else if (value == AttributesKeyName) { reader.Read(); retval = Deserialize(objectType, reader, retval); } else if (modelProperty != null) { if (!(modelProperty is FieldModelProperty)) { reader.Read(); // burn the PropertyName token //TODO: Embedded would be dropped here! continue; // These aren't supposed to be here, they're supposed to be in "related"! } var prop = modelProperty.Property; object propVal; Type enumType; if (prop.PropertyType == typeof(string) && prop.GetCustomAttributes().Any(attr => attr is SerializeStringAsRawJsonAttribute)) { reader.Read(); if (reader.TokenType == JsonToken.Null) { propVal = null; } else { var token = JToken.Load(reader); var rawPropVal = token.ToString(); propVal = JsonHelpers.MinifyJson(rawPropVal); } } else if (prop.PropertyType.IsGenericType && prop.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>) && (enumType = prop.PropertyType.GetGenericArguments()[0]).IsEnum) { // Nullable enums need special handling reader.Read(); propVal = reader.TokenType == JsonToken.Null ? null : Enum.Parse(enumType, reader.Value.ToString()); } else if (prop.PropertyType == typeof(DateTimeOffset) || prop.PropertyType == typeof(DateTimeOffset?)) { // For some reason reader.ReadAsString(); propVal = reader.TokenType == JsonToken.Null ? (object) null : DateTimeOffset.Parse(reader.Value.ToString()); } else { reader.Read(); propVal = DeserializeAttribute(prop.PropertyType, reader); } prop.SetValue(retval, propVal, null); // Tell the MetadataManager that we deserialized this property MetadataManager.Instance.SetMetaForProperty(retval, prop, true); // pop the value off the reader, so we catch the EndObject token below!. reader.Read(); } else { // Unexpected/unknown property--Skip the propertyname and its value reader.Skip(); if (reader.TokenType == JsonToken.StartArray || reader.TokenType == JsonToken.StartObject) reader.Skip(); else reader.Read(); } } } while (reader.TokenType != JsonToken.EndObject); reader.Read(); // burn the EndObject token before returning back up the call stack return retval; }
private static void ReadByDataType(JsonReader reader, DataType dataType) { switch (dataType) { case DataType.String: reader.ReadAsString(); break; case DataType.Int16: case DataType.Int32: reader.ReadAsInt32(); break; case DataType.ByteArray: reader.ReadAsBytes(); break; case DataType.Decimal: reader.ReadAsDecimal(); break; case DataType.DateTime: reader.ReadAsDateTime(); break; // These types are dealt with, but there's no explicit reader method for them // so we just have to trust that it does the right thing. case DataType.Byte: case DataType.Int64: case DataType.Boolean: case DataType.Float: case DataType.Double: reader.Read(); break; } }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if( reader.TokenType != JsonToken.StartObject ) { var msg = string.Join(" ", $"The JSON representation of a DateTime/DateTimeOffset when parsing the server response is not a {Converter.PseudoTypeKey}:{Converter.Time} object.", $"This happens if your JSON document contains DateTime/DateTimeOffsets in some other format (like an ISO8601 string) rather than a native RethinkDB pseudo type {Converter.PseudoTypeKey}:{Converter.Time} object.", $"If you are overriding the default Ser/Deserialization process, you need to make sure DateTime/DateTimeOffset are native {Converter.PseudoTypeKey}:{Converter.Time} objects before using the built-in {nameof(ReqlDateTimeConverter)}.", "See https://rethinkdb.com/docs/data-types/ for more information about how Date and Times are represented in RethinkDB."); throw new JsonSerializationException(msg); } reader.ReadAndAssertProperty(Converter.PseudoTypeKey); var reql_type = reader.ReadAsString(); if( reql_type != Converter.Time ) { throw new JsonSerializationException($"Expected {Converter.PseudoTypeKey} should be {Converter.Time} but got {reql_type}."); } reader.ReadAndAssertProperty("epoch_time"); var epoch_time = reader.ReadAsDecimal(); if( epoch_time == null ) { throw new JsonSerializationException($"The {Converter.PseudoTypeKey}:{Converter.Time} object doesn't have an epoch_time value."); } reader.ReadAndAssertProperty("timezone"); var timezone = reader.ReadAsString(); //realign and get out of the pseudo type //one more post read to align out of { reql_type:TIME, .... } reader.ReadAndAssert(); var tz = TimeSpan.Parse(timezone.Substring(1)); if( !timezone.StartsWith("+") ) tz = -tz; var epoch = new DateTimeOffset(1970, 1, 1, 0, 0, 0, TimeSpan.Zero); var dt = epoch + TimeSpan.FromSeconds(Convert.ToDouble(epoch_time.Value)); var dto = dt.ToOffset(tz); if( objectType == typeof(DateTimeOffset) ) return dto; var tzHandle = serializer.DateTimeZoneHandling; switch( tzHandle ) { case DateTimeZoneHandling.Local: return dto.LocalDateTime; case DateTimeZoneHandling.Utc: return dto.UtcDateTime; case DateTimeZoneHandling.Unspecified: return dto.DateTime; case DateTimeZoneHandling.RoundtripKind: return dto.Offset == TimeSpan.Zero ? dto.UtcDateTime : dto.LocalDateTime; default: throw new JsonSerializationException("Invalid date time handling value."); } }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var list = new List<IPocketArticle>(); var pocketArticle = new PocketArticle(); while (reader.Read()) { if (reader.Value != null) { string[] strArray = reader.Path.Split('.'); switch (strArray[strArray.Count() - 1]) { case "item_id": pocketArticle.ItemId = reader.ReadAsString(); break; case "resolved_id": pocketArticle.ResolvedId = reader.ReadAsString(); break; case "given_url": pocketArticle.GivenUrl = reader.ReadAsString(); break; case "given_title": pocketArticle.GivenTitle = reader.ReadAsString(); break; case "favorite": pocketArticle.Favorite = reader.ReadAsString(); break; case "status": pocketArticle.Status = reader.ReadAsString(); break; case "time_added": pocketArticle.TimeAdded = reader.ReadAsString(); break; case "time_updated": pocketArticle.TimeUpdated = reader.ReadAsString(); break; case "time_read": pocketArticle.TimeRead = reader.ReadAsString(); break; case "time_favorited": pocketArticle.TimeFavorited = reader.ReadAsString(); break; case "sort_id": pocketArticle.SortId = reader.ReadAsInt32().GetValueOrDefault(); break; case "resolved_title": pocketArticle.ResolvedTitle = reader.ReadAsString(); break; case "resolved_url": pocketArticle.ResolvedUrl = reader.ReadAsString(); break; case "excerpt": pocketArticle.Excerpt = reader.ReadAsString(); break; case "is_article": pocketArticle.IsArticle = reader.ReadAsString(); break; case "is_index": pocketArticle.IsIndex = reader.ReadAsString(); break; case "has_video": pocketArticle.HasVideo = reader.ReadAsString(); break; case "has_image": pocketArticle.HasImage = reader.ReadAsString(); break; case "word_count": pocketArticle.WordCount = reader.ReadAsString(); break; } } else { if (!string.IsNullOrEmpty(pocketArticle.ItemId)) list.Add(pocketArticle); pocketArticle = new PocketArticle(); } } return list; }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var data = reader.ReadAsString(); return(data.ToColor()); }