Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Collections;
- using System.Reflection;
- using System.IO;
- namespace ReflectorS
- {
- public class Serializer
- {
- public int IndentSpaceCount { get; set; } = 2;
- public bool TreatStringAsEnumerable { get; set; } = false;
- public void Serialize(TextWriter writer, object graph)
- {
- InnerSerialize(writer, graph.GetType().Name, graph, 0);
- }
- private void InnerSerialize(TextWriter writer, string objectName, object graph, int IndentLevel)
- {
- if (graph.GetType().IsPrimitive || graph is String)
- {
- SerializePrimitiveProperty(writer, objectName, graph, IndentLevel);
- }
- else if (graph is IEnumerable)
- {
- SerializeIEnumerable(writer, objectName, graph as IEnumerable, IndentLevel);
- }
- else
- {
- string IndentSpaces = new String(' ', IndentLevel * IndentSpaceCount);
- writer.WriteLine(IndentSpaces + "<{0}>", objectName);
- SerializeObject(writer, graph, IndentLevel + 1);
- writer.WriteLine(IndentSpaces + "</{0}>", objectName);
- }
- }
- private void SerializePrimitiveProperty(TextWriter writer, string propertyName, object property, int IndentLevel)
- {
- string IndentSpaces = new String(' ', IndentLevel * IndentSpaceCount);
- writer.Write(IndentSpaces + "<{0}>", propertyName);
- writer.Write(property); // is primitive so we can safely print it
- writer.WriteLine("</{0}>", propertyName);
- }
- private void SerializeString (TextWriter writer, string StringName, string text, int IndentLevel)
- {
- if (!TreatStringAsEnumerable)
- {
- SerializePrimitiveProperty(writer, StringName, text, IndentLevel);
- }
- else
- {
- ; // todo as enum
- }
- }
- private void SerializeIEnumerable(TextWriter writer, string IEnumerableName, IEnumerable enumerable, int IndentLevel)
- {
- foreach (Object obj in enumerable)
- {
- InnerSerialize(writer, obj.GetType().Name, obj, IndentLevel + 1);
- }
- }
- private void SerializeObject(TextWriter writer, object graph, int IndentLevel)
- {
- string IndentSpaces = new String(' ', IndentLevel * IndentSpaceCount);
- writer.WriteLine(IndentSpaces + "<{0}>", graph.GetType().Name);
- foreach (var property in graph.GetType().GetProperties())
- {
- var PropertyObject = (Object)property.GetValue(graph);
- {
- InnerSerialize(writer, property.Name, PropertyObject, IndentLevel + 1);
- }
- }
- writer.WriteLine(IndentSpaces + "</{0}>", graph.GetType().Name);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement