Advertisement
Guest User

Untitled

a guest
Apr 26th, 2018
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.11 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Collections;
  7. using System.Reflection;
  8.  
  9. using System.IO;
  10.  
  11. namespace ReflectorS
  12. {
  13. public class Serializer
  14. {
  15. public int IndentSpaceCount { get; set; } = 2;
  16. public bool TreatStringAsEnumerable { get; set; } = false;
  17.  
  18.  
  19. public void Serialize(TextWriter writer, object graph)
  20. {
  21. InnerSerialize(writer, graph.GetType().Name, graph, 0);
  22. }
  23.  
  24. private void InnerSerialize(TextWriter writer, string objectName, object graph, int IndentLevel)
  25. {
  26. if (graph.GetType().IsPrimitive || graph is String)
  27. {
  28. SerializePrimitiveProperty(writer, objectName, graph, IndentLevel);
  29. }
  30.  
  31. else if (graph is IEnumerable)
  32. {
  33. SerializeIEnumerable(writer, objectName, graph as IEnumerable, IndentLevel);
  34. }
  35.  
  36. else
  37. {
  38. string IndentSpaces = new String(' ', IndentLevel * IndentSpaceCount);
  39. writer.WriteLine(IndentSpaces + "<{0}>", objectName);
  40. SerializeObject(writer, graph, IndentLevel + 1);
  41. writer.WriteLine(IndentSpaces + "</{0}>", objectName);
  42.  
  43. }
  44.  
  45.  
  46. }
  47.  
  48. private void SerializePrimitiveProperty(TextWriter writer, string propertyName, object property, int IndentLevel)
  49. {
  50. string IndentSpaces = new String(' ', IndentLevel * IndentSpaceCount);
  51.  
  52. writer.Write(IndentSpaces + "<{0}>", propertyName);
  53. writer.Write(property); // is primitive so we can safely print it
  54. writer.WriteLine("</{0}>", propertyName);
  55.  
  56. }
  57.  
  58. private void SerializeString (TextWriter writer, string StringName, string text, int IndentLevel)
  59. {
  60. if (!TreatStringAsEnumerable)
  61. {
  62. SerializePrimitiveProperty(writer, StringName, text, IndentLevel);
  63. }
  64. else
  65. {
  66. ; // todo as enum
  67. }
  68. }
  69.  
  70. private void SerializeIEnumerable(TextWriter writer, string IEnumerableName, IEnumerable enumerable, int IndentLevel)
  71. {
  72. foreach (Object obj in enumerable)
  73. {
  74. InnerSerialize(writer, obj.GetType().Name, obj, IndentLevel + 1);
  75. }
  76.  
  77. }
  78.  
  79. private void SerializeObject(TextWriter writer, object graph, int IndentLevel)
  80. {
  81. string IndentSpaces = new String(' ', IndentLevel * IndentSpaceCount);
  82. writer.WriteLine(IndentSpaces + "<{0}>", graph.GetType().Name);
  83.  
  84.  
  85. foreach (var property in graph.GetType().GetProperties())
  86. {
  87. var PropertyObject = (Object)property.GetValue(graph);
  88.  
  89. {
  90. InnerSerialize(writer, property.Name, PropertyObject, IndentLevel + 1);
  91. }
  92. }
  93.  
  94. writer.WriteLine(IndentSpaces + "</{0}>", graph.GetType().Name);
  95.  
  96.  
  97.  
  98.  
  99. }
  100.  
  101.  
  102. }
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement