From 3376b82501000692d6dac24b051af738cdaf2737 Mon Sep 17 00:00:00 2001
From: MW
Date: Thu, 24 May 2007 12:16:50 +0000
Subject: Some more code refactoring, plus a restructuring of the directories
so that the Grid servers can be a separate solution to the region server.
---
Common-Source/XmlRpcCS/XmlRpcSerializer.cs | 109 +++++++++++++++++++++++++++++
1 file changed, 109 insertions(+)
create mode 100644 Common-Source/XmlRpcCS/XmlRpcSerializer.cs
(limited to 'Common-Source/XmlRpcCS/XmlRpcSerializer.cs')
diff --git a/Common-Source/XmlRpcCS/XmlRpcSerializer.cs b/Common-Source/XmlRpcCS/XmlRpcSerializer.cs
new file mode 100644
index 0000000..0643d38
--- /dev/null
+++ b/Common-Source/XmlRpcCS/XmlRpcSerializer.cs
@@ -0,0 +1,109 @@
+namespace Nwc.XmlRpc
+{
+ using System;
+ using System.Collections;
+ using System.IO;
+ using System.Xml;
+
+ /// Base class of classes serializing data to XML-RPC's XML format.
+ /// This class handles the basic type conversions like Integer to <i4>.
+ ///
+ public class XmlRpcSerializer : XmlRpcXmlTokens
+ {
+
+ /// Serialize the XmlRpcRequest to the output stream.
+ /// An XmlTextWriter stream to write data to.
+ /// An Object to serialize.
+ ///
+ virtual public void Serialize(XmlTextWriter output, Object obj)
+ {
+ }
+
+ /// Serialize the XmlRpcRequest to a String.
+ /// Note this may represent a real memory hog for a large request.
+ /// An Object to serialize.
+ /// String containing XML-RPC representation of the request.
+ ///
+ public String Serialize(Object obj)
+ {
+ StringWriter strBuf = new StringWriter();
+ XmlTextWriter xml = new XmlTextWriter(strBuf);
+ xml.Formatting = Formatting.Indented;
+ xml.Indentation = 4;
+ Serialize(xml, obj);
+ xml.Flush();
+ String returns = strBuf.ToString();
+ xml.Close();
+ return returns;
+ }
+
+ /// Serialize the object to the output stream.
+ /// An XmlTextWriter stream to write data to.
+ /// An Object to serialize.
+ public void SerializeObject(XmlTextWriter output, Object obj)
+ {
+ if (obj == null)
+ return;
+
+ if (obj is byte[])
+ {
+ byte[] ba = (byte[])obj;
+ output.WriteStartElement(BASE64);
+ output.WriteBase64(ba, 0, ba.Length);
+ output.WriteEndElement();
+ }
+ else if (obj is String)
+ {
+ output.WriteElementString(STRING, obj.ToString());
+ }
+ else if (obj is Int32)
+ {
+ output.WriteElementString(INT, obj.ToString());
+ }
+ else if (obj is DateTime)
+ {
+ output.WriteElementString(DATETIME, ((DateTime)obj).ToString(ISO_DATETIME));
+ }
+ else if (obj is Double)
+ {
+ output.WriteElementString(DOUBLE, obj.ToString());
+ }
+ else if (obj is Boolean)
+ {
+ output.WriteElementString(BOOLEAN, ((((Boolean)obj) == true) ? "1" : "0"));
+ }
+ else if (obj is IList)
+ {
+ output.WriteStartElement(ARRAY);
+ output.WriteStartElement(DATA);
+ if (((ArrayList)obj).Count > 0)
+ {
+ foreach (Object member in ((IList)obj))
+ {
+ output.WriteStartElement(VALUE);
+ SerializeObject(output, member);
+ output.WriteEndElement();
+ }
+ }
+ output.WriteEndElement();
+ output.WriteEndElement();
+ }
+ else if (obj is IDictionary)
+ {
+ IDictionary h = (IDictionary)obj;
+ output.WriteStartElement(STRUCT);
+ foreach (String key in h.Keys)
+ {
+ output.WriteStartElement(MEMBER);
+ output.WriteElementString(NAME, key);
+ output.WriteStartElement(VALUE);
+ SerializeObject(output, h[key]);
+ output.WriteEndElement();
+ output.WriteEndElement();
+ }
+ output.WriteEndElement();
+ }
+
+ }
+ }
+}
--
cgit v1.1