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(); } }
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(); }
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); }
public override void WriteToJson(Utf8JsonWriter writer, WritedObjects objrefs) { base.WriteToJson(writer, objrefs); writer.WriteBoolean(nameof(Global), Global); writer.WriteString(nameof(State), State.ToString()); }
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); }
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); }
public void WriteToJson(Utf8JsonWriter writer, WritedObjects objrefs) { ((IJsonSerializable)Model).WriteToJson(writer, objrefs); writer.WriteString("Template", Template); writer.WriteString("Script", Script); writer.WriteString("Style", Style); }
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(); }
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); }
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); }
public void WriteToJson(Utf8JsonWriter writer, WritedObjects objrefs) { writer.WritePropertyName("elements"); writer.WriteStartArray(); foreach (var item in Elements) { item.WriteToJson(writer); } writer.WriteEndArray(); }
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); }
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(); }
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); }
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(); }
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(); }
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); } }
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); } } }
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(); }
public void WriteToJson(Utf8JsonWriter writer, WritedObjects objrefs) { writer.WriteString(nameof(ModelType), ModelType); writer.WriteString(nameof(ModelID), ModelID); }
/// <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); } }
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(); } } }
public static void WriteEnumerable(this Utf8JsonWriter writer, IEnumerable list, WritedObjects objrefs) { writer.WriteStartArray(); foreach (var item in list) { writer.Serialize(item, objrefs); } writer.WriteEndArray(); }
public override void WriteMembers(Utf8JsonWriter writer, WritedObjects objrefs) { writer.WriteString("App", ((ApplicationNode)Parent).Model.Name); writer.WriteString("Name", Text); }
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; } }
public void WriteToJson(Utf8JsonWriter writer, WritedObjects objrefs) { writer.WriteNumber(nameof(MemberId), MemberId); writer.WriteBoolean(nameof(OrderByDesc), OrderByDesc); }
public void WriteToJson(Utf8JsonWriter writer, WritedObjects objrefs) { writer.WriteString(nameof(Name), Name); writer.WriteString(nameof(Declare), Declare); }
protected virtual void WriteMembers(Utf8JsonWriter writer, WritedObjects objrefs) { }
protected override void WriteMembers(Utf8JsonWriter writer, WritedObjects objrefs) { writer.WriteString(nameof(RefModelId), RefModelId.ToString()); writer.WriteNumber(nameof(RefMemberId), RefMemberId); }