retrace,gui: Object members don't have string marker.
diff --git a/gui/qubjson.cpp b/gui/qubjson.cpp
index 90bf77e..2649a41 100644
--- a/gui/qubjson.cpp
+++ b/gui/qubjson.cpp
@@ -108,9 +108,8 @@
 
 
 static size_t
-readSize(QDataStream &stream)
+readSize(QDataStream &stream, Marker type)
 {
-    Marker type = readMarker(stream);
     switch (type) {
     case MARKER_INT8:
         return readInt8(stream);
@@ -131,9 +130,26 @@
 
 
 static QString
-readString(QDataStream &stream)
+readChar(QDataStream &stream)
 {
-    size_t size = readSize(stream);
+    qint8 c;
+    stream >> c;
+    Q_ASSERT(c >= 0);
+    return QChar(c);
+}
+
+
+static size_t
+readSize(QDataStream &stream)
+{
+    Marker type = readMarker(stream);
+    return readSize(stream, type);
+}
+
+
+static QString
+readString(QDataStream &stream, size_t size)
+{
     char *buf = new char [size];
     stream.readRawData(buf, size);
     QString str = QString::fromUtf8(buf, size);
@@ -142,6 +158,14 @@
 }
 
 
+static QString
+readString(QDataStream &stream)
+{
+    size_t size = readSize(stream);
+    return readString(stream, size);
+}
+
+
 static QVariant
 readVariant(QDataStream &stream, Marker type);
 
@@ -183,8 +207,8 @@
     Marker marker = readMarker(stream);
     while (marker != MARKER_OBJECT_END &&
            marker != MARKER_EOF) {
-        Q_ASSERT(marker == MARKER_STRING);
-        QString name = readString(stream);
+        size_t nameSize = readSize(stream, marker);
+        QString name = readString(stream, nameSize);
         marker = readMarker(stream);
         QVariant value = readVariant(stream, marker);
         object[name] = value;
@@ -224,8 +248,7 @@
         Q_UNIMPLEMENTED();
         return QVariant();
     case MARKER_CHAR:
-        Q_UNIMPLEMENTED();
-        return QVariant();
+        return readChar(stream);
     case MARKER_STRING:
         return readString(stream);
     case MARKER_ARRAY_BEGIN: