public void Read(BinaryInputStream s)
 {
     properties.ReadFromStream(s);
     if (s.ReadBool() == false)
     {
         Task.SendError("key should contain one layout");
     }
     layout = s.ReadObject<AbstractActLayoutObject>();
     if (layout == null || !(layout is Act2DMapLayoutObject))
     {
         Task.SendError("only support Act2DMapLayout in key");
     }
 }
        public void ReadFromStream(BinaryInputStream s, bool is_short_version = false)
        {
            List<Action<BinaryInputStream>> readers = new List<Action<BinaryInputStream>>();

            if (!is_short_version)
            {
                s.ReadBool(true);
            }

            int size = s.ReadInt32();
            for (int i = 0; i < size; ++i)
            {
                string n = s.ReadString();
                int t = s.ReadInt32();
                readers.Add(SetField(n, t));
            }
            foreach (var ac in readers)
            {
                ac(s);
            }
        }