private static void MakeTreenode(ByamlTreeNode node) { if (node.ByamlNode.NodeType == ByamlNodeType.Array) { var array = (List <ByamlEntry>)node.ByamlNode.Value; for (int i = 0; i < array.Count; i++) { if (!ByamlParser.NodeIsValue(array[i].NodeType)) { var child = new ByamlTreeNode(array[i], i.ToString()); node.Nodes.Add(child); MakeTreenode(child); } } } else if (node.ByamlNode.NodeType == ByamlNodeType.Dictionary) { var dict = (Dictionary <string, ByamlEntry>)node.ByamlNode.Value; foreach (var item in dict) { if (!ByamlParser.NodeIsValue(item.Value.NodeType)) { var child = new ByamlTreeNode(item.Value, item.Key); node.Nodes.Add(child); MakeTreenode(child); } } } }
private void WriteByaml(BinaryDataWriter bw) { string magic = (BOM == ByteOrder.BigEndian || (BOM == ByteOrder.System && !BitConverter.IsLittleEndian)) ? "BY" : "YB"; bw.Write(Encoding.ASCII.GetBytes(magic)); bw.Write(ByamlVersion); bw.Write(0x10); GenerateStringLists(); long tempStrTableOff = bw.Position; bw.Write(0); //temp long tempRootNodeOff = bw.Position; bw.Write(0); //temp ByamlParser.WriteStringList(NameTable, bw); long tempPos = bw.Position; using (bw.TemporarySeek(tempStrTableOff, SeekOrigin.Begin)) bw.Write((int)tempPos); ByamlParser.WriteStringList(Stringtable, bw); tempPos = bw.Position; using (bw.TemporarySeek(tempRootNodeOff, SeekOrigin.Begin)) bw.Write((int)tempPos); if (RootNode.NodeType == ByamlNodeType.Array) { ByamlParser.WriteArray(this, RootNode, bw); } else if (RootNode.NodeType == ByamlNodeType.Dictionary) { ByamlParser.WriteDictionary(this, RootNode, bw); } }
private void ReadByaml(BinaryDataReader br) { string magic = Encoding.ASCII.GetString(br.ReadBytes(2)); switch (magic) { case "BY": br.ByteOrder = ByteOrder.BigEndian; break; case "YB": br.ByteOrder = ByteOrder.LittleEndian; break; default: throw new ByamlException("Invalid Header"); } BOM = br.ByteOrder; ByamlVersion = br.ReadUInt16(); uint headerSize = br.ReadUInt32(); uint stringTableOffset = br.ReadUInt32(); uint dataOffset = br.ReadUInt32(); br.Seek(headerSize, SeekOrigin.Begin); NameTable = (List <string>)ByamlParser.ParseStringTable(this, br).Value; br.Seek(stringTableOffset, SeekOrigin.Begin); Stringtable = (List <string>)ByamlParser.ParseStringTable(this, br).Value; br.Seek(dataOffset, SeekOrigin.Begin); ByamlNodeType t = (ByamlNodeType)br.ReadByte(); switch (t) { case ByamlNodeType.Array: case ByamlNodeType.Dictionary: br.Position--; RootNode = ByamlParser.ParseEntry(this, t, br); break; default: throw new ByamlException("Invalid Root Node"); } }
public void SerializeObject(object obj) { RootNode = ByamlParser.ProcessEntrySerialization(obj); }
public T Deserialize <T>() { return((T)ByamlParser.ProcessEntryDeserialization(RootNode, typeof(T))); }