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();
            }
        }
Exemple #2
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;
                }
            }