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; } }
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; } }
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; } }
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"); } }
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; } }
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; } }