public static void WriteMetaArrayData(this JsonHelperWriter json, string type, int size = -1)
 {
     json.WriteStartMetadata(META.ARRAYTYPE);
     json.WriteProperty(META.TYPE_FULLNAME, type);
     if (type == META.ARRAYTYPE_ARRAY)
     {
         json.WriteProperty(META.ARRAYTYPE_ARRAY_SIZE, size);
     }
     json.WriteEndMetadata();
 }
    public static void WriteMetaExternal(this JsonHelperWriter json, string path, string @in = META.EXTERNAL_IN_RESOURCES)
    {
        json.WriteStartMetadata(META.EXTERNAL);

        if (@in != META.EXTERNAL_IN_RESOURCES)
        {
            json.WriteProperty(META.EXTERNAL_IN, @in);
        }
        json.WriteProperty(META.EXTERNAL_PATH, path);

        json.WriteEndMetadata();
    }
    public static bool TryWriteMetaReference(this JsonHelperWriter json, object obj, bool register = false)
    {
        int id = json.GetReferenceID(obj);

        if (id != META.REF_NONE)
        {
            json.WriteStartMetadata(META.REF);

            json.WriteProperty(META.REF_ID, id);
            json.WriteProperty(META.REF_TYPE, json.GetReferenceType(id, obj));

            json.WriteEndMetadata();
            return(true);
        }

        if (register)
        {
            json.RegisterReference(obj);
        }
        return(false);
    }
    private static void WriteMetaType_(this JsonHelperWriter json, Type type, string metaType)
    {
        json.WriteStartMetadata(metaType);

        json.WriteProperty(META.TYPE_FULLNAME, type.FullName);

        /*string ns = type.Namespace;
         * if (ns != null) {
         *  json.WritePropertyName(META.TYPE_SPLIT);
         *  json.WriteStartArray();
         *  json.Write(ns);
         *  json.Write(type.Name);
         *  json.WriteEndArray();
         * }*/
        Type[] genparams = type.GetGenericArguments();
        if (genparams.Length != 0)
        {
            json.WriteProperty(META.TYPE_GENPARAMS, genparams);
        }

        json.WriteEndMetadata();
    }