Advertisement
Guest User

Untitled

a guest
Apr 24th, 2014
306
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.22 KB | None | 0 0
  1. [JsonProperty("title",Required=Required.Always,Order=1)]
  2. public string Title { get; set; }
  3.  
  4. [JsonProperty("date",Order=3)]
  5. [JsonConverter(typeof(IsoDateTimeConverter))]
  6. public DateTime Date { get; set; }
  7.  
  8. [JsonProperty(Order=2)]
  9. [JsonConverter(typeof(TypeIdentifierJsonConverter))]
  10. public TypeIdentifier DocTypeIdentifier { get; set; }
  11.  
  12. public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
  13. {
  14. TypeIdentifier docTypeId;
  15. id= (TypeIdentifier) value;
  16.  
  17. writer.WritePropertyName(id.ParameterName);
  18. writer.WriteValue(id.Value);
  19. }
  20.  
  21. [JsonObject(MemberSerialization.OptIn)]
  22. class Document
  23. {
  24. [JsonProperty("title", Required = Required.Always, Order = 1)]
  25. public string Title { get; set; }
  26.  
  27. [JsonProperty("date", Order = 3)]
  28. [JsonConverter(typeof(IsoDateTimeConverter))]
  29. public DateTime Date { get; set; }
  30.  
  31. [JsonProperty(Order = 2)]
  32. public TypeIdentifier DocTypeIdentifier { get; set; }
  33.  
  34. public string OtherStuff { get; set; }
  35. }
  36.  
  37. class TypeIdentifier
  38. {
  39. public string Value { get; set; }
  40. public string ParameterName { get; set; }
  41. }
  42.  
  43. class DocumentConverter : JsonConverter
  44. {
  45. public override bool CanConvert(Type objectType)
  46. {
  47. return (objectType == typeof(Document));
  48. }
  49.  
  50. public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
  51. {
  52. Document doc = (Document)value;
  53.  
  54. // Create a JObject from the document, respecting existing JSON attribs
  55. JObject jo = JObject.FromObject(value);
  56.  
  57. // At this point the DocTypeIdentifier is not serialized correctly.
  58. // Fix it by replacing the property with the correct name and value.
  59. JProperty prop = jo.Children<JProperty>()
  60. .Where(p => p.Name == "DocTypeIdentifier")
  61. .First();
  62.  
  63. prop.AddAfterSelf(new JProperty(doc.DocTypeIdentifier.ParameterName,
  64. doc.DocTypeIdentifier.Value));
  65. prop.Remove();
  66.  
  67. // Write out the JSON
  68. jo.WriteTo(writer);
  69. }
  70.  
  71. public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
  72. {
  73. throw new NotImplementedException();
  74. }
  75. }
  76.  
  77. JsonSerializerSettings settings = new JsonSerializerSettings();
  78. settings.Converters.Add(new DocumentConverter());
  79.  
  80. string json = JsonConvert.SerializeObject(doc, settings);
  81.  
  82. class Program
  83. {
  84. static void Main(string[] args)
  85. {
  86. Document doc = new Document
  87. {
  88. Title = "How to write a JSON converter",
  89. Date = DateTime.Today,
  90. DocTypeIdentifier = new TypeIdentifier
  91. {
  92. ParameterName = "type_id",
  93. Value = "26"
  94. },
  95. OtherStuff = "this should not appear in the JSON"
  96. };
  97.  
  98. JsonSerializerSettings settings = new JsonSerializerSettings();
  99. settings.Converters.Add(new DocumentConverter());
  100. settings.Formatting = Formatting.Indented;
  101.  
  102. string json = JsonConvert.SerializeObject(doc, settings);
  103. Console.WriteLine(json);
  104. }
  105. }
  106.  
  107. {
  108. "title": "How to write a JSON converter",
  109. "type_id": "26",
  110. "date": "2014-03-28T00:00:00-05:00"
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement