Exemple #1
0
        private static void WriteElementTo(PmlElement Element, BinaryWriter Writer)
        {
            if (Element == null)
            {
                Writer.Write((byte)AmfDataType.Null);
                return;
            }
            switch (Element.Type)
            {
            case PmlType.Null:
                Writer.Write((byte)AmfDataType.Null);
                break;

            case PmlType.Dictionary:
                Writer.Write((byte)AmfDataType.UntypedObject);
                //WriteDictionary(Writer, (PmlDictionary)Element);
                WriteUntypedObject(Writer, (PmlDictionary)Element);
                break;

            case PmlType.Collection:
                Writer.Write((byte)AmfDataType.Array);
                WriteCollection(Writer, (PmlCollection)Element);
                break;

            case PmlType.Binary:
                Writer.Write((byte)AmfDataType.String);
                byte[] bytes = Element.ToByteArray();
                if (bytes.Length > UInt16.MaxValue)
                {
                    Writer.Write((byte)AmfDataType.String);
                    WriteString(Writer, bytes);
                }
                else
                {
                    Writer.Write((byte)AmfDataType.LongString);
                    WriteLongString(Writer, bytes);
                }
                break;

            case PmlType.String:
                string str = Element.ToString();
                if (str.Length < UInt16.MaxValue)
                {
                    Writer.Write((byte)AmfDataType.String);
                    WriteString(Writer, str);
                }
                else
                {
                    Writer.Write((byte)AmfDataType.LongString);
                    WriteLongString(Writer, str);
                }
                break;

            case PmlType.Integer:
                Writer.Write((byte)AmfDataType.Number);
                WriteDouble(Writer, (Element as PmlInteger).ToDouble());
                break;
            }
        }
Exemple #2
0
        private static void WriteElementTo(PmlElement Element, string Indent, TextWriter Writer)
        {
            if (Element == null)
            {
                Console.WriteLine("NULL");
                return;
            }
            switch (Element.Type)
            {
            case PmlType.Null:
                Writer.WriteLine("NULL");
                break;

            case PmlType.Collection:
                Writer.WriteLine("COLLECTION {");
                foreach (PmlElement Child in (PmlCollection)Element)
                {
                    Writer.Write(Indent + " ");
                    WriteElementTo(Child, Indent + " ", Writer);
                }

                Writer.WriteLine(Indent + "}");
                break;

            case PmlType.Dictionary:
                Writer.WriteLine("DICTIONARY {");
                foreach (KeyValuePair <string, PmlElement> Child in (PmlDictionary)Element)
                {
                    Writer.Write(Indent + " " + Uri.EscapeDataString(Child.Key) + " ");
                    WriteElementTo(Child.Value, Indent + " ", Writer);
                }

                Writer.WriteLine(Indent + "}");
                break;

            case PmlType.Binary:
                Writer.WriteLine("BINARY " + Convert.ToBase64String(Element.ToByteArray()));
                break;

            case PmlType.Integer:
                Writer.WriteLine("INT " + Element.ToString());
                break;

            case PmlType.String:
                Writer.WriteLine("STRING " + Uri.EscapeDataString(Element.ToString()));
                break;
            }
        }
Exemple #3
0
        private static void WriteElementTo(PmlElement Element, System.Xml.XmlWriter Writer)
        {
            switch (Element.Type)
            {
            case PmlType.Binary:
                Writer.WriteAttributeString("type", "binary");
                byte[] Bytes = Element.ToByteArray();
                Writer.WriteBase64(Bytes, 0, Bytes.Length);
                break;

            case PmlType.Collection:
                Writer.WriteAttributeString("type", "collection");
                foreach (PmlElement Child in (PmlCollection)Element)
                {
                    Writer.WriteStartElement("item");
                    WriteElementTo(Child, Writer);
                    Writer.WriteEndElement();
                }

                break;

            case PmlType.Dictionary:
                Writer.WriteAttributeString("type", "dictionary");
                foreach (KeyValuePair <string, PmlElement> Child in (PmlDictionary)Element)
                {
                    Writer.WriteStartElement(Child.Key);
                    WriteElementTo(Child.Value, Writer);
                    Writer.WriteEndElement();
                }

                break;

            case PmlType.Integer:
                Writer.WriteAttributeString("type", "integer");
                Writer.WriteString(Element.ToString());
                break;

            case PmlType.Null:
                Writer.WriteAttributeString("type", "null");
                break;

            case PmlType.String:
                Writer.WriteAttributeString("type", "string");
                Writer.WriteString(Element.ToString());
                break;
            }
        }
Exemple #4
0
        private static void WriteElementTo(PmlElement element, TextWriter stream)
        {
            if (element == null)
            {
                stream.Write("null");
                return;
            }
            switch (element.Type)
            {
            case PmlType.Null:
                stream.Write("null");
                break;

            case PmlType.String:
                WriteEscapedString(stream, element.ToString());
                break;

            case PmlType.Binary:
                stream.Write('"');
                foreach (Byte b in element.ToByteArray())
                {
                    if (b < ' ' || b == '"' || b == '\\')
                    {
                        WriteEscapedCharacter(stream, (Char)b);
                    }
                    else
                    {
                        stream.Write((Char)b);
                    }
                }
                stream.Write('"');
                break;

            case PmlType.Integer:
                stream.Write(element.ToInt64().ToString(CultureInfo.InvariantCulture));
                break;

            case PmlType.Dictionary:
                IDictionary <String, PmlElement> dict = (IDictionary <String, PmlElement>)element;
                Boolean first = true;
                stream.Write('{');
                foreach (KeyValuePair <String, PmlElement> item in dict)
                {
                    if (!first)
                    {
                        stream.Write(',');
                    }
                    first = false;
                    WriteEscapedString(stream, item.Key);
                    stream.Write(':');
                    WriteElementTo(item.Value, stream);
                }
                stream.Write('}');
                break;

            case PmlType.Collection:
                IEnumerable <PmlElement> col = (IEnumerable <PmlElement>)element;
                first = true;
                stream.Write('[');
                foreach (PmlElement item in col)
                {
                    if (!first)
                    {
                        stream.Write(',');
                    }
                    first = false;
                    WriteElementTo(item, stream);
                }
                stream.Write(']');
                break;

            default:
                throw new InvalidOperationException("Can not encode PML type " + element.Type.ToString() + " to JSON");
            }
        }
Exemple #5
0
        private static void WriteElementTo(PmlElement element, Stream stream, Encoding encoding)
        {
            if (element == null)
            {
                WriteString(stream, encoding, "N;");
                return;
            }
            switch (element.Type)
            {
            case PmlType.Null:
                WriteString(stream, encoding, "N;");
                break;

            case PmlType.String:
                Byte[] bytes = encoding.GetBytes(element.ToString());
                WriteString(stream, encoding, "s:");
                WriteString(stream, encoding, bytes.Length.ToString());
                WriteString(stream, encoding, ":\"");
                stream.Write(bytes, 0, bytes.Length);
                WriteString(stream, encoding, "\";");
                break;

            case PmlType.Binary:
                bytes = element.ToByteArray();
                WriteString(stream, encoding, "s:");
                WriteString(stream, encoding, bytes.Length.ToString());
                WriteString(stream, encoding, ":\"");
                stream.Write(bytes, 0, bytes.Length);
                WriteString(stream, encoding, "\";");
                break;

            case PmlType.Integer:
                WriteString(stream, encoding, "i:");
                WriteString(stream, encoding, element.ToString());
                WriteString(stream, encoding, ";");
                break;

            case PmlType.Number:
                WriteString(stream, encoding, "d:");
                WriteString(stream, encoding, element.ToDouble().ToString("f", CultureInfo.InvariantCulture));
                WriteString(stream, encoding, ";");
                break;

            case PmlType.Dictionary:
                IDictionary <String, PmlElement> dict = (IDictionary <String, PmlElement>)element;
                WriteString(stream, encoding, "a:");
                WriteString(stream, encoding, dict.Count.ToString());
                WriteString(stream, encoding, ":{");
                foreach (KeyValuePair <String, PmlElement> item in dict)
                {
                    bytes = encoding.GetBytes(item.Key);
                    WriteString(stream, encoding, "s:");
                    WriteString(stream, encoding, bytes.Length.ToString());
                    WriteString(stream, encoding, ":\"");
                    stream.Write(bytes, 0, bytes.Length);
                    WriteString(stream, encoding, "\";");
                    WriteElementTo(item.Value, stream, encoding);
                }
                WriteString(stream, encoding, "}");
                break;

            case PmlType.Collection:
                ICollection <PmlElement> col = (ICollection <PmlElement>)element;
                WriteString(stream, encoding, "a:");
                WriteString(stream, encoding, col.Count.ToString());
                WriteString(stream, encoding, ":{");
                int i = 0;
                foreach (PmlElement item in col)
                {
                    WriteString(stream, encoding, "i:");
                    WriteString(stream, encoding, i.ToString());
                    WriteString(stream, encoding, ";");
                    WriteElementTo(item, stream, encoding);
                    i += 1;
                }
                WriteString(stream, encoding, "}");
                break;

            default:
                WriteString(stream, encoding, "N;");
                break;
            }
        }
Exemple #6
0
        private static void WriteElementTo(PmlElement Element, BinaryWriter Writer)
        {
            if (Element == null)
            {
                Writer.Write((byte)0);
                return;
            }
            switch (Element.Type)
            {
            case PmlType.Null:
                Writer.Write((byte)0);
                break;

            case PmlType.Dictionary:
                Writer.Write((byte)1);
                foreach (KeyValuePair <string, PmlElement> Item in (PmlDictionary)Element)
                {
                    Writer.Write((byte)1);
                    Writer.Write(Item.Key);
                    WriteElementTo(Item.Value, Writer);
                }
                Writer.Write((byte)0);
                break;

            case PmlType.Collection:
                Writer.Write((byte)2);
                foreach (PmlElement Item in (PmlCollection)Element)
                {
                    Writer.Write((byte)1);
                    WriteElementTo(Item, Writer);
                }
                Writer.Write((byte)0);
                break;

            case PmlType.Binary: {
                Writer.Write((byte)10);
                Byte[] Buffer = Element.ToByteArray();
                if (Buffer == null)
                {
                    Writer.Write((int)0);
                }
                else
                {
                    Writer.Write((int)Buffer.Length);
                    Writer.Write(Buffer);
                }
            } break;

            case PmlType.String:
                Writer.Write((byte)11);
                string Str = Element.ToString();
                if (Str == null)
                {
                    Writer.Write(String.Empty);
                }
                else
                {
                    Writer.Write(Str);
                }

                break;

            case PmlType.Integer:
                Writer.Write((byte)20);
                PmlInteger RMInt = (PmlInteger)Element;
                if (RMInt.IsSigned)
                {
                    Writer.Write((byte)1);
                    Writer.Write((long)RMInt);
                }
                else
                {
                    Writer.Write((byte)0);
                    Writer.Write((ulong)RMInt);
                }
                break;

            case PmlType.Boolean:
                Writer.Write((byte)21);
                Writer.Write(Element.ToBoolean());
                break;

            case PmlType.Number:
                Writer.Write((byte)22);
                Writer.Write(Element.ToDouble());
                break;

            default:
                Writer.Write((byte)0);
                Console.WriteLine("PmlBinaryRW: Can not encode PML type {0}", Element.Type);
                break;
            }
        }