Advertisement
Guest User

Untitled

a guest
Jun 2nd, 2015
286
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.64 KB | None | 0 0
  1. public class CamelCaseToPascalCaseExpandoObjectConverter : JsonConverter
  2. {
  3. internal static bool IsPrimitiveToken(JsonToken token)
  4. {
  5. switch (token)
  6. {
  7. case JsonToken.Integer:
  8. case JsonToken.Float:
  9. case JsonToken.String:
  10. case JsonToken.Boolean:
  11. case JsonToken.Null:
  12. case JsonToken.Undefined:
  13. case JsonToken.Date:
  14. case JsonToken.Bytes:
  15. return true;
  16. default:
  17. return false;
  18. }
  19. }
  20.  
  21. /// <summary>
  22. /// Writes the JSON representation of the object.
  23. /// </summary>
  24. /// <param name="writer">The <see cref="JsonWriter"/> to write to.</param>
  25. /// <param name="value">The value.</param>
  26. /// <param name="serializer">The calling serializer.</param>
  27. public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
  28. {
  29. // can write is set to false
  30. }
  31.  
  32. /// <summary>
  33. /// Reads the JSON representation of the object.
  34. /// </summary>
  35. /// <param name="reader">The <see cref="JsonReader"/> to read from.</param>
  36. /// <param name="objectType">Type of the object.</param>
  37. /// <param name="existingValue">The existing value of object being read.</param>
  38. /// <param name="serializer">The calling serializer.</param>
  39. /// <returns>The object value.</returns>
  40. public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
  41. {
  42. return ReadValue(reader);
  43. }
  44.  
  45. private object ReadValue(JsonReader reader)
  46. {
  47. while (reader.TokenType == JsonToken.Comment)
  48. {
  49. if (!reader.Read())
  50. throw new Exception("Unexpected end.");
  51. }
  52.  
  53. switch (reader.TokenType)
  54. {
  55. case JsonToken.StartObject:
  56. return ReadObject(reader);
  57. case JsonToken.StartArray:
  58. return ReadList(reader);
  59. default:
  60. //CHANGED
  61. //call to static method declared inside this class
  62. if (IsPrimitiveToken(reader.TokenType))
  63. return reader.Value;
  64.  
  65. //CHANGED
  66. //Use string.format instead of some util function declared inside JSON.NET
  67. throw new Exception(string.Format(CultureInfo.InvariantCulture, "Unexpected token when converting ExpandoObject: {0}", reader.TokenType));
  68. }
  69. }
  70.  
  71. private object ReadList(JsonReader reader)
  72. {
  73. IList<object> list = new List<object>();
  74.  
  75. while (reader.Read())
  76. {
  77. switch (reader.TokenType)
  78. {
  79. case JsonToken.Comment:
  80. break;
  81. default:
  82. object v = ReadValue(reader);
  83.  
  84. list.Add(v);
  85. break;
  86. case JsonToken.EndArray:
  87. return list;
  88. }
  89. }
  90.  
  91. throw new Exception("Unexpected end.");
  92. }
  93.  
  94. private object ReadObject(JsonReader reader)
  95. {
  96. IDictionary<string, object> expandoObject = new ExpandoObject();
  97.  
  98. while (reader.Read())
  99. {
  100. switch (reader.TokenType)
  101. {
  102. case JsonToken.PropertyName:
  103. //CHANGED
  104. //added call to ToPascalCase extension method
  105. string propertyName = reader.Value.ToString().ToPascalCase();
  106.  
  107. if (!reader.Read())
  108. throw new Exception("Unexpected end.");
  109.  
  110. object v = ReadValue(reader);
  111.  
  112. expandoObject[propertyName] = v;
  113. break;
  114. case JsonToken.Comment:
  115. break;
  116. case JsonToken.EndObject:
  117. return expandoObject;
  118. }
  119. }
  120.  
  121. throw new Exception("Unexpected end.");
  122. }
  123.  
  124. /// <summary>
  125. /// Determines whether this instance can convert the specified object type.
  126. /// </summary>
  127. /// <param name="objectType">Type of the object.</param>
  128. /// <returns>
  129. /// <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>.
  130. /// </returns>
  131. public override bool CanConvert(Type objectType)
  132. {
  133. return (objectType == typeof(ExpandoObject));
  134. }
  135.  
  136. /// <summary>
  137. /// Gets a value indicating whether this <see cref="JsonConverter"/> can write JSON.
  138. /// </summary>
  139. /// <value>
  140. /// <c>true</c> if this <see cref="JsonConverter"/> can write JSON; otherwise, <c>false</c>.
  141. /// </value>
  142. public override bool CanWrite
  143. {
  144. get { return false; }
  145. }
  146. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement