Advertisement
Guest User

Untitled

a guest
Feb 21st, 2019
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.77 KB | None | 0 0
  1. public List<object> Values { get; set; }
  2.  
  3. var settings = new Newtonsoft.Json.JsonSerializerSettings()
  4. {
  5. DateFormatHandling = Newtonsoft.Json.DateFormatHandling.IsoDateFormat,
  6. DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc
  7. };
  8.  
  9. {
  10. "Intance": 1,
  11. "Values": [
  12. "Ivan",
  13. "488-555-1212",
  14. "United States",
  15. {
  16. "ShortDesc": "NY",
  17. "LongDesc": "New York"
  18. },
  19. "1985-05-01T00:00:00-05:00"
  20. ],
  21. "LastUpdated": "2017-02-06T22:11:34-05:00"
  22. }
  23.  
  24. [AttributeUsage(AttributeTargets.Property)]
  25. public class IgnoreTimeZoneAttribute : Attribute
  26. {
  27. }
  28.  
  29. public class IgnoreTimeZonePropertyResolver : DefaultContractResolver
  30. {
  31. protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
  32. {
  33. IList<JsonProperty> props = base.CreateProperties(type, memberSerialization);
  34.  
  35. foreach (JsonProperty prop in props)
  36. {
  37. PropertyInfo pi = type.GetProperty(prop.UnderlyingName);
  38.  
  39. if (pi != null && pi.GetCustomAttribute(typeof(IgnoreTimeZoneAttribute), true) != null)
  40. {
  41. prop.ValueProvider = new IgnoreTimeZoneValueProvider(pi);
  42. }
  43. }
  44.  
  45. return props;
  46. }
  47.  
  48. public class IgnoreTimeZoneValueProvider : IValueProvider
  49. {
  50. private PropertyInfo _targetProperty;
  51.  
  52. public IgnoreTimeZoneValueProvider(PropertyInfo targetProperty)
  53. {
  54. this._targetProperty = targetProperty;
  55. }
  56.  
  57. // GetValue is called by Json.Net during serialization.
  58. public object GetValue(object target)
  59. {
  60. return _targetProperty.GetValue(target);
  61. }
  62.  
  63. // SetValue gets called by Json.Net during deserialization.
  64. // The value parameter has the value/values read from the JSON;
  65. // target is the object on which to set the value/values without TimeZone info.
  66. public void SetValue(object target, object value)
  67. {
  68. var newValue = value;
  69.  
  70. if (typeof(IList).IsAssignableFrom(_targetProperty.PropertyType))
  71. {
  72. IList<object> values = value as IList<object>;
  73.  
  74. if (values != null)
  75. {
  76. for (int i = 0; i < values.Count - 1; i++)
  77. {
  78. var curValue = values[i];
  79. if (curValue != null && curValue.GetType() == typeof(DateTime))
  80. {
  81. DateTimeOffset dateTime = new DateTimeOffset((DateTime)curValue);
  82. values[i] = dateTime.UtcDateTime.Date;
  83. }
  84. }
  85. }
  86. }
  87.  
  88. _targetProperty.SetValue(target, newValue);
  89. }
  90. }
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement