Esempio n. 1
0
        public PayloadType JsonPayloadType => PayloadType.UnknownType; //PayloadType.PermissionNode;

        public void WriteToJson(Utf8JsonWriter writer, WritedObjects objrefs)
        {
            writer.WriteString("Id", Model == null ? /*随机*/ Guid.NewGuid().ToString() : Model.Id.ToString());
            writer.WriteString(nameof(Name), Name);

            if (_childs != null && _childs.Count > 0)
            {
                writer.WritePropertyName(nameof(Childs));
                writer.WriteList(_childs, objrefs);
            }

            if (Model != null) //注意不管有无OrgUnits都需要序列化,因为前端用于判断是否权限节点
            {
                writer.WritePropertyName("OrgUnits");
                writer.WriteStartArray();
                if (Model.HasOrgUnits)
                {
                    for (int i = 0; i < Model.OrgUnits.Count; i++)
                    {
                        writer.WriteStringValue(Model.OrgUnits[i]);
                    }
                }
                writer.WriteEndArray();
            }
        }
Esempio n. 2
0
        public void WriteToJson(Utf8JsonWriter writer, WritedObjects objrefs)
        {
            writer.WriteBoolean(nameof(OrderByDesc), OrderByDesc);

            writer.WritePropertyName(nameof(Indexes));
            if (!HasIndexes)
            {
                writer.WriteEmptyArray();
            }
            else
            {
                writer.Serialize(Indexes.Where(t => t.PersistentState != Data.PersistentState.Deleted).ToArray(), objrefs);
            }

            //写入分区键集合
            writer.WritePropertyName(nameof(PartitionKeys));
            writer.WriteStartArray();
            if (HasPartitionKeys)
            {
                for (int i = 0; i < PartitionKeys.Length; i++)
                {
                    writer.WriteStartObject();
                    writer.WriteNumber("MemberId", PartitionKeys[i].MemberId);
                    writer.WriteBoolean("OrderByDesc", PartitionKeys[i].OrderByDesc);
                    writer.WriteNumber("Rule", (int)PartitionKeys[i].Rule);
                    writer.WriteNumber("RuleArg", PartitionKeys[i].RuleArgument);
                    writer.WriteEndObject();
                }
            }
            writer.WriteEndArray();
        }
Esempio n. 3
0
        void IJsonSerializable.WriteToJson(Utf8JsonWriter writer, WritedObjects objrefs)
        {
            writer.WriteString(nameof(ID), ID);
            writer.WriteNumber("Type", (int)NodeType);
            writer.WriteString("Text", Text);
            if (!(this is ModelNode))
            {
                writer.WritePropertyName("Nodes");
                writer.WriteStartArray();
                for (int i = 0; i < Nodes.Count; i++)
                {
                    writer.Serialize(Nodes[i], objrefs);
                }
                writer.WriteEndArray();
            }

            if (CheckoutInfo != null)
            {
                writer.WritePropertyName("CheckoutBy");
                if (IsCheckoutByMe)
                {
                    writer.WriteStringValue("Me");
                }
                else
                {
                    writer.WriteStringValue(CheckoutInfo.DeveloperName);
                }
            }

            WriteMembers(writer, objrefs);
        }
Esempio n. 4
0
        public override void WriteToJson(Utf8JsonWriter writer, WritedObjects objrefs)
        {
            base.WriteToJson(writer, objrefs);

            writer.WriteBoolean(nameof(Global), Global);
            writer.WriteString(nameof(State), State.ToString());
        }
Esempio n. 5
0
        public void WriteToJson(Utf8JsonWriter writer, WritedObjects objrefs)
        {
            writer.WriteString("Type", ModelNode.Model.ModelType.ToString());
            writer.WriteString("Model", $"{ModelNode.AppNode.Model.Name}.{ModelNode.Model.Name}");
            writer.WriteString("Location", Location);

            WriteMember(writer);
        }
Esempio n. 6
0
 public void WriteToJson(Utf8JsonWriter writer, WritedObjects objrefs)
 {
     writer.WriteString(nameof(Name), Name);
     writer.WriteNumber(nameof(Size), Size);
     writer.WriteString(nameof(CreateTime), CreateTime);
     writer.WriteString(nameof(ModifiedTime), ModifiedTime);
     writer.WriteBoolean(nameof(IsFile), IsFile);
 }
Esempio n. 7
0
            public void WriteToJson(Utf8JsonWriter writer, WritedObjects objrefs)
            {
                ((IJsonSerializable)Model).WriteToJson(writer, objrefs);

                writer.WriteString("Template", Template);
                writer.WriteString("Script", Script);
                writer.WriteString("Style", Style);
            }
Esempio n. 8
0
 public static void WriteList(this Utf8JsonWriter writer, IList list, WritedObjects objrefs)
 {
     writer.WriteStartArray();
     for (int i = 0; i < list.Count; i++)
     {
         writer.Serialize(list[i], objrefs);
     }
     writer.WriteEndArray();
 }
Esempio n. 9
0
 void IJsonSerializable.WriteToJson(Utf8JsonWriter writer, WritedObjects objrefs)
 {
     //注意:都+1,以方便前端定位
     writer.WriteNumber(nameof(Line), Line + 1);
     writer.WriteNumber(nameof(Column), Column + 1);
     writer.WriteNumber(nameof(EndLine), EndLine + 1);
     writer.WriteNumber(nameof(EndColumn), EndColumn + 1);
     writer.WriteNumber(nameof(Level), Level);
     writer.WriteString(nameof(Text), Text);
 }
Esempio n. 10
0
        void IJsonSerializable.WriteToJson(Utf8JsonWriter writer, WritedObjects objrefs)
        {
            writer.WriteNumber("ID", MemberId);
            writer.WriteBoolean(nameof(AllowNull), AllowNull);
            writer.WriteString(nameof(Comment), Comment);
            writer.WriteString(nameof(Name), Name);
            writer.WriteNumber(nameof(Type), (int)Type);

            WriteMembers(writer, objrefs);
        }
Esempio n. 11
0
 public void WriteToJson(Utf8JsonWriter writer, WritedObjects objrefs)
 {
     writer.WritePropertyName("elements");
     writer.WriteStartArray();
     foreach (var item in Elements)
     {
         item.WriteToJson(writer);
     }
     writer.WriteEndArray();
 }
Esempio n. 12
0
 public void WriteToJson(Utf8JsonWriter writer, WritedObjects objrefs)
 {
     //注意:直接转换为前端需要的格式
     writer.WriteString("detail", string.IsNullOrEmpty(ReturnType) ?
                        DisplayText : $"{ReturnType} {DisplayText}");
     writer.WriteString("documentation", Description); //TODO: extractSummaryText(response.Description)
     writer.WriteNumber("kind", KindHelper.Convert(Kind));
     writer.WriteString("insertText", CompletionText.Replace("<", "").Replace(">", ""));
     writer.WriteString("label", DisplayText);
 }
Esempio n. 13
0
 public void WriteToJson(Utf8JsonWriter writer, WritedObjects objrefs)
 {
     writer.WriteNumber("activeSignature", ActiveSignature);
     writer.WriteNumber("activeParameter", ActiveParameter);
     writer.WritePropertyName("signatures");
     writer.WriteStartArray();
     foreach (var item in Signatures)
     {
         item.WriteToJson(writer);
     }
     writer.WriteEndArray();
 }
Esempio n. 14
0
 public void WriteToJson(Utf8JsonWriter writer, WritedObjects objrefs)
 {
     writer.WriteNumber(nameof(ParentNodeType), ParentNodeType);
     writer.WriteString(nameof(ParentNodeID), ParentNodeID);
     writer.WritePropertyName(nameof(NewNode));
     writer.Serialize(NewNode, objrefs);
     if (!string.IsNullOrEmpty(RootNodeID))
     {
         writer.WriteString(nameof(RootNodeID), RootNodeID);
     }
     writer.WriteNumber(nameof(InsertIndex), InsertIndex);
 }
        void IJsonSerializable.WriteToJson(Utf8JsonWriter writer, WritedObjects objrefs)
        {
            //注意: 直接转换为前端monaco-editor需要的格式, 另所有需要+1
            // https://microsoft.github.io/monaco-editor/api/interfaces/monaco.languages.textedit.html
            writer.WritePropertyName("range");
            writer.WriteStartObject();
            writer.WriteNumber("startColumn", StartColumn + 1);
            writer.WriteNumber("startLineNumber", StartLine + 1);
            writer.WriteNumber("endColumn", EndColumn + 1);
            writer.WriteNumber("endLineNumber", EndLine + 1);
            writer.WriteEndObject();

            writer.WriteString("text", NewText);
        }
Esempio n. 16
0
 public virtual void WriteToJson(Utf8JsonWriter writer, WritedObjects objrefs)
 {
     writer.WriteNumber("ID", IndexId);
     writer.WriteString(nameof(Name), Name);
     writer.WriteBoolean(nameof(Unique), Unique);
     writer.WritePropertyName(nameof(Fields));
     writer.WriteStartArray();
     for (int i = 0; i < Fields.Length; i++)
     {
         writer.WriteStartObject();
         writer.WriteNumber("MID", Fields[i].MemberId); //TODO: rename
         writer.WriteBoolean("OrderByDesc", Fields[i].OrderByDesc);
         writer.WriteEndObject();
     }
     writer.WriteEndArray();
 }
Esempio n. 17
0
            public void WriteToJson(Utf8JsonWriter writer, WritedObjects objrefs)
            {
                writer.WritePropertyName("contents");
                writer.WriteStartArray();
                for (int i = 0; i < Contents.Length; i++)
                {
                    writer.WriteStartObject();
                    writer.WriteString("value", (string)Contents[i]);
                    writer.WriteEndObject();
                }
                writer.WriteEndArray();

                writer.WritePropertyName("range");
                writer.WriteStartObject();
                writer.WriteNumber("startLineNumber", StartLine);
                writer.WriteNumber("startColumn", StartColumn);
                writer.WriteNumber("endLineNumber", EndLine);
                writer.WriteNumber("endColumn", EndColumn);
                writer.WriteEndObject();
            }
Esempio n. 18
0
        public void WriteToJson(Utf8JsonWriter writer, WritedObjects objrefs)
        {
            writer.WritePropertyName("IsNew");
            writer.WriteBooleanValue(PersistentState == Data.PersistentState.Detached);

            //写入成员列表,注意不向前端发送EntityRef的隐藏成员及已标为删除的成员
            writer.WritePropertyName(nameof(Members));
            var q = from t in Members
                    where t.PersistentState != Data.PersistentState.Deleted &&
                    !(t is DataFieldModel && ((DataFieldModel)t).IsForeignKey)
                    select t;

            writer.Serialize(q.ToArray(), objrefs);

            //写入存储选项
            if (StoreOptions != null)
            {
                writer.WritePropertyName(nameof(StoreOptions));
                writer.Serialize(StoreOptions, objrefs);
            }
        }
Esempio n. 19
0
        public override void WriteMembers(Utf8JsonWriter writer, WritedObjects objrefs)
        {
            writer.WriteNumber("SortNo", SortNo);
            writer.WriteString("App", AppNode.Model.Name);
            writer.WriteString("Name", Model.Name);
            writer.WriteNumber("ModelType", (int)Model.ModelType);
            if (Model.ModelType == ModelType.Entity)
            {
                var entityModel = (EntityModel)Model;
                //writer.WritePropertyName("LocalizedName");
                //writer.WriteValue(entityModel.LocalizedName.Value);

                //EntityModel输出对应的存储标识,方便前端IDE筛选相同存储的实体
                if (entityModel.SysStoreOptions != null)
                {
                    writer.WriteNumber("StoreId", 0);
                }
                else if (entityModel.SqlStoreOptions != null)
                {
                    writer.WriteNumber("StoreId", entityModel.SqlStoreOptions.StoreModelId);
                }
            }
        }
Esempio n. 20
0
        public void WriteToJson(Utf8JsonWriter writer, WritedObjects objrefs)
        {
            writer.WriteString("StoreName", DataStoreModel.Name);
            writer.WriteNumber("StoreKind", (int)DataStoreModel.Kind);

            PrimaryKey.WriteToJson(writer); //不需要属性名

            writer.WritePropertyName("MaterializedViews");
            writer.WriteStartArray();
            if (HasMaterializedView)
            {
                for (int i = 0; i < _materializedViews.Count; i++)
                {
                    if (_materializedViews[i].PersistentState != PersistentState.Deleted)
                    {
                        writer.WriteStartObject();
                        _materializedViews[i].WriteToJson(writer);
                        writer.WriteEndObject();
                    }
                }
            }

            writer.WriteEndArray();
        }
Esempio n. 21
0
 public void WriteToJson(Utf8JsonWriter writer, WritedObjects objrefs)
 {
     writer.WriteString(nameof(ModelType), ModelType);
     writer.WriteString(nameof(ModelID), ModelID);
 }
Esempio n. 22
0
        /// <summary>
        /// 将调用服务的结果AnyValue序列化Json
        /// </summary>
        /// <param name="isResponseError">仅适用于子进程</param>
        public static bool SerializeAsInvokeResponse(this AnyValue obj, Stream stream,
                                                     int msgId, bool isResponseError = false)
        {
            try
            {
                using var jw = new Utf8JsonWriter(stream);
                jw.WriteStartObject();
                jw.WriteNumber(ResponseIdPropertyName.AsSpan(), msgId);

                if (isResponseError || (obj.Type == AnyValueType.Object && obj.ObjectValue is Exception))
                {
                    jw.WriteString(ResponseErrorPropertyName.AsSpan(),
                                   isResponseError ? (string)obj.ObjectValue : ((Exception)obj.ObjectValue).Message);
                }
                else
                {
                    jw.WritePropertyName(ResponseDataPropertyName.AsSpan());
                    switch (obj.Type)
                    {
                    case AnyValueType.Empty: jw.WriteNullValue(); break;

                    case AnyValueType.Boolean: jw.WriteBooleanValue(obj.BooleanValue); break;

                    case AnyValueType.Byte: jw.WriteNumberValue(obj.ByteValue); break;

                    case AnyValueType.Int16: jw.WriteNumberValue(obj.Int16Value); break;

                    case AnyValueType.UInt16: jw.WriteNumberValue(obj.UInt16Value); break;

                    case AnyValueType.Int32: jw.WriteNumberValue(obj.Int32Value); break;

                    case AnyValueType.UInt32: jw.WriteNumberValue(obj.UInt32Value); break;

                    case AnyValueType.Float: jw.WriteNumberValue(obj.FloatValue); break;

                    case AnyValueType.Double: jw.WriteNumberValue(obj.DoubleValue); break;

                    case AnyValueType.Decimal: jw.WriteNumberValue(obj.DecimalValue); break;

                    //暂Int64 & UInt64转换为字符串
                    case AnyValueType.Int64: jw.WriteStringValue(obj.Int64Value.ToString()); break;

                    case AnyValueType.UInt64: jw.WriteStringValue(obj.UInt64Value.ToString()); break;

                    case AnyValueType.DateTime: jw.WriteStringValue(obj.DateTimeValue); break;

                    case AnyValueType.Guid: jw.WriteStringValue(obj.GuidValue); break;

                    case AnyValueType.Object:
                        var objrefs = new WritedObjects();
                        jw.Serialize(obj.ObjectValue, objrefs);
                        break;
                    }
                }

                jw.WriteEndObject();
                jw.Flush();
                return(true);
            }
            catch (Exception ex)
            {
                Log.Warn($"Serialize error: {ExceptionHelper.GetExceptionDetailInfo(ex)}");
                return(false);
            }
        }
Esempio n. 23
0
        public static void Serialize(this Utf8JsonWriter writer, object res, WritedObjects objrefs)
        {
            if (res == null || res == DBNull.Value)
            {
                writer.WriteNullValue();
                return;
            }

            //先检查引用类型是否已序列化过
            var  type        = res.GetType();
            bool isRefObject = type.IsClass && type != typeof(string);

            if (isRefObject)
            {
                if (objrefs.TryGetValue(res, out string refID))
                {
                    if (!string.IsNullOrEmpty(refID))
                    {
                        writer.WriteStartObject();
                        writer.WritePropertyName(RefPropertyName);
                        writer.WriteStringValue(refID);
                        writer.WriteEndObject();
                        return;
                    }
                    throw new Exception("Json序列化存在重复引用");
                }
                if (res is Entity entity && !entity.Model.IsDTO)
                {
                    refID = $"{(byte)entity.PersistentState}{entity.ModelId}{entity.Id}";
                }
                objrefs.Add(res, refID);
            }

            if (res is IJsonSerializable serializable)
            {
                //开始写入对象
                if (serializable.JsonPayloadType != PayloadType.JsonResult)
                {
                    writer.WriteStartObject();
                }
                if (serializable.JsonPayloadType != PayloadType.UnknownType && serializable.JsonPayloadType != PayloadType.JsonResult)
                {
                    writer.WritePropertyName(TypePropertyName);             // 写入对象类型
                    if (serializable.JsonPayloadType == PayloadType.Entity) //实体类写入的是持久化状态及模型标识
                    {
                        var entity = (Entity)res;
                        writer.WriteStringValue($"{(byte)entity.PersistentState}{entity.ModelId}");
                        if (entity.Model.SysStoreOptions != null)
                        {
                            writer.WritePropertyName(IdPropertyName); // 写入对象标识
                            writer.WriteStringValue((Guid)entity.Id);
                        }
                        else if (entity.Model.SqlStoreOptions != null)
                        {
                            //TODO:写入$Id标识,从WriteObjectRefs内累加标识计数器
                        }
                    }
                    else if (serializable.JsonPayloadType == PayloadType.ExtKnownType) //扩展类型写入反射信息
                    {
                        writer.WriteStringValue(type.FullName);
                    }
                    else
                    {
                        writer.WriteNumberValue((int)serializable.JsonPayloadType);
                    }
                }

                // 开始调用实现
                serializable.WriteToJson(writer, objrefs);
                //结束写入对象
                if (serializable.JsonPayloadType != PayloadType.JsonResult)
                {
                    writer.WriteEndObject();
                }
            }
            else //----非实现了IJsonSerializable的对象---
            {
                if (type.IsPrimitive || type == typeof(string) || type == typeof(DateTime) ||
                    type == typeof(Guid) || type == typeof(decimal))
                {
                    System.Text.Json.JsonSerializer.Serialize(writer, res, type);
                }
                else if (res is IList) // 优先转换IList集合
                {
                    WriteList(writer, (IList)res, objrefs);
                }
                else if (res is IEnumerable) // 其他集合
                {
                    WriteEnumerable(writer, (IEnumerable)res, objrefs);
                }
                else // 转换其他类型如匿名类和没有继承IJsonSerializable接口的类
                {
                    //todo:***** 暂反射简单实现,另考虑缓存
                    var properties = type.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
                    writer.WriteStartObject();
                    for (int i = 0; i < properties.Length; i++)
                    {
                        writer.WritePropertyName(properties[i].Name);
                        writer.Serialize(properties[i].GetValue(res), objrefs);
                    }
                    writer.WriteEndObject();
                }
            }
        }
Esempio n. 24
0
 public static void WriteEnumerable(this Utf8JsonWriter writer, IEnumerable list, WritedObjects objrefs)
 {
     writer.WriteStartArray();
     foreach (var item in list)
     {
         writer.Serialize(item, objrefs);
     }
     writer.WriteEndArray();
 }
Esempio n. 25
0
 public override void WriteMembers(Utf8JsonWriter writer, WritedObjects objrefs)
 {
     writer.WriteString("App", ((ApplicationNode)Parent).Model.Name);
     writer.WriteString("Name", Text);
 }
Esempio n. 26
0
        void IJsonSerializable.WriteToJson(Utf8JsonWriter writer, WritedObjects objrefs)
        {
            var model = Model;
            EntityMemberModel mm;

            for (int i = 0; i < model.Members.Count; i++)
            {
                mm = model.Members[i];
                ref EntityMember m = ref GetMember(mm.Name);
                switch (mm.Type)
                {
                case EntityMemberType.EntityRef:
                    if (m.HasValue)     //注意:无加载值不写入给前端
                    {
                        writer.WritePropertyName(mm.Name);
                        writer.Serialize(m.ObjectValue, objrefs);
                    }
                    break;

                case EntityMemberType.EntitySet:
                    if (m.HasValue)     //注意:无加载值不写入给前端
                    {
                        writer.WritePropertyName(mm.Name);
                        writer.WriteList((IList)m.ObjectValue, objrefs);
                    }
                    break;

                case EntityMemberType.EntityRefDisplayText:
                    if (m.HasValue)     //注意:无加载值不写入给前端
                    {
                        writer.WritePropertyName(mm.Name);
                        writer.WriteStringValue((string)m.ObjectValue);
                    }
                    break;

                case EntityMemberType.DataField:
                    writer.WritePropertyName(mm.Name);
                    if (m.HasValue)
                    {
                        switch (m.ValueType)
                        {
                        case EntityFieldType.Binary:
                            writer.WriteBase64StringValue((byte[])m.ObjectValue); break;

                        case EntityFieldType.Boolean:
                            writer.WriteBooleanValue(m.BooleanValue); break;

                        case EntityFieldType.Byte:
                            writer.WriteNumberValue(m.ByteValue); break;

                        case EntityFieldType.DateTime:
                            writer.WriteStringValue(m.DateTimeValue); break;

                        case EntityFieldType.Decimal:
                            writer.WriteNumberValue(m.DecimalValue); break;

                        case EntityFieldType.Double:
                            writer.WriteNumberValue(m.DoubleValue); break;

                        case EntityFieldType.Enum:
                            writer.WriteNumberValue(m.Int32Value); break;

                        case EntityFieldType.Float:
                            writer.WriteNumberValue(m.FloatValue); break;

                        case EntityFieldType.Guid:
                            writer.WriteStringValue(m.GuidValue); break;

                        case EntityFieldType.EntityId:
                            writer.WriteStringValue((Guid)((EntityId)m.ObjectValue)); break;

                        case EntityFieldType.Int16:
                            writer.WriteNumberValue(m.Int16Value); break;

                        case EntityFieldType.UInt16:
                            writer.WriteNumberValue(m.UInt16Value); break;

                        case EntityFieldType.Int32:
                            writer.WriteNumberValue(m.Int32Value); break;

                        case EntityFieldType.UInt32:
                            writer.WriteNumberValue(m.UInt32Value); break;

                        case EntityFieldType.Int64:
                            writer.WriteNumberValue(m.Int64Value); break;

                        case EntityFieldType.UInt64:
                            writer.WriteStringValue(m.UInt64Value.ToString()); break;         //暂序列化为字符串

                        case EntityFieldType.String:
                            writer.WriteStringValue((string)m.ObjectValue); break;

                        default: throw new NotSupportedException();
                        }
                    }
                    else
                    {
                        writer.WriteNullValue();
                    }
                    break;

                default:
                    throw ExceptionHelper.NotImplemented();
                    //writer.WritePropertyName(m.Name);
                    //writer.Serialize(m.BoxedValue);
                    //break;
                }
            }
Esempio n. 27
0
 public void WriteToJson(Utf8JsonWriter writer, WritedObjects objrefs)
 {
     writer.WriteNumber(nameof(MemberId), MemberId);
     writer.WriteBoolean(nameof(OrderByDesc), OrderByDesc);
 }
Esempio n. 28
0
 public void WriteToJson(Utf8JsonWriter writer, WritedObjects objrefs)
 {
     writer.WriteString(nameof(Name), Name);
     writer.WriteString(nameof(Declare), Declare);
 }
Esempio n. 29
0
 protected virtual void WriteMembers(Utf8JsonWriter writer, WritedObjects objrefs)
 {
 }
Esempio n. 30
0
 protected override void WriteMembers(Utf8JsonWriter writer, WritedObjects objrefs)
 {
     writer.WriteString(nameof(RefModelId), RefModelId.ToString());
     writer.WriteNumber(nameof(RefMemberId), RefMemberId);
 }