Пример #1
0
 /// <summary>
 /// 序列化行数据
 /// </summary>
 /// <param name="p_dataRow"></param>
 /// <param name="p_writer"></param>
 void SerializeJsonRow(Row p_dataRow, Utf8JsonWriter p_writer)
 {
     p_writer.WriteStartArray();
     foreach (var cell in p_dataRow.Cells)
     {
         if (cell.IsChanged)
         {
             // 值变化时传递两值数组 [原始值,当前值]
             p_writer.WriteStartArray();
             JsonRpcSerializer.Serialize(cell.OriginalVal, p_writer);
             JsonRpcSerializer.Serialize(cell.Val, p_writer);
             p_writer.WriteEndArray();
         }
         else
         {
             JsonRpcSerializer.Serialize(cell.Val, p_writer);
         }
     }
     // 行状态,多出的列
     if (p_dataRow.IsAdded)
     {
         p_writer.WriteStringValue("Added");
     }
     else if (p_dataRow.IsChanged)
     {
         p_writer.WriteStringValue("Modified");
     }
     p_writer.WriteEndArray();
 }
Пример #2
0
        /// <summary>
        /// 按照系统规则序列化对象
        /// </summary>
        /// <param name="p_object"></param>
        /// <returns></returns>
        public static string Serialize(object p_object)
        {
            Throw.IfNull(p_object);

            using (var stream = new MemoryStream())
            {
                using (var writer = new Utf8JsonWriter(stream, JsonOptions.UnsafeWriter))
                {
                    JsonRpcSerializer.Serialize(p_object, writer);
                }
                return(Encoding.UTF8.GetString(stream.ToArray()));
            }
        }
Пример #3
0
Файл: Dict.cs Проект: Daoting/dt
        void IRpcJson.WriteRpcJson(Utf8JsonWriter p_writer)
        {
            //[
            //	"#dict",
            //	["key1", "类型", "val1"], // 简单类型System.XXX
            //	["key2", "Int64", 11],
            //	["key3", "Byte[]", "CgwOEA=="],
            //	["key4", "", ["#row",...]] // 复杂类型空即可
            //]
            p_writer.WriteStartArray();
            p_writer.WriteStringValue("#dict");

            foreach (var item in this)
            {
                p_writer.WriteStartArray();

                p_writer.WriteStringValue(item.Key);
                if (item.Value == null)
                {
                    // null按string
                    p_writer.WriteStringValue("String");
                    p_writer.WriteNullValue();
                }
                else
                {
                    var tp = item.Value.GetType();
                    if (tp.FullName == "System." + tp.Name)
                    {
                        // 简单类型
                        p_writer.WriteStringValue(tp.Name);
                    }
                    else if (tp.IsGenericType && tp.GetGenericTypeDefinition() == typeof(Nullable <>))
                    {
                        // 可空值类型
                        p_writer.WriteStringValue(tp.GetGenericArguments()[0].Name + "?");
                    }
                    else
                    {
                        // 复杂类型空即可
                        p_writer.WriteStringValue("");
                    }
                    JsonRpcSerializer.Serialize(item.Value, p_writer);
                }

                p_writer.WriteEndArray();
            }

            p_writer.WriteEndArray();
        }
Пример #4
0
Файл: Row.cs Проект: Daoting/dt
        void IRpcJson.WriteRpcJson(Utf8JsonWriter p_writer)
        {
            p_writer.WriteStartArray();
            p_writer.WriteStringValue("#row");

            // 行状态
            if (IsAdded)
            {
                p_writer.WriteStringValue("Added");
            }
            else if (IsChanged)
            {
                p_writer.WriteStringValue("Modified");
            }

            p_writer.WriteStartObject();
            foreach (var cell in _cells)
            {
                p_writer.WritePropertyName(cell.ID);
                if (cell.IsChanged)
                {
                    // 值变化时传递完整信息 ["类型", "当前值", "原始值"]
                    p_writer.WriteStartArray();
                    p_writer.WriteStringValue(Table.GetColTypeAlias(cell.Type));
                    JsonRpcSerializer.Serialize(cell.Val, p_writer);
                    JsonRpcSerializer.Serialize(cell.OriginalVal, p_writer);
                    p_writer.WriteEndArray();
                }
                else if (cell.Type == typeof(string))
                {
                    // string类型,值无变化
                    p_writer.WriteStringValue((string)cell.Val);
                }
                else
                {
                    // 非string类型,值无变化 ["类型", "当前值"]
                    p_writer.WriteStartArray();
                    p_writer.WriteStringValue(Table.GetColTypeAlias(cell.Type));
                    JsonRpcSerializer.Serialize(cell.Val, p_writer);
                    p_writer.WriteEndArray();
                }
            }
            p_writer.WriteEndObject();

            p_writer.WriteEndArray();
        }
Пример #5
0
        void IRpcJson.WriteRpcJson(Utf8JsonWriter p_writer)
        {
            p_writer.WriteStartArray();
            p_writer.WriteStringValue("#msg");
            p_writer.WriteStringValue(MethodName);

            // 参数
            p_writer.WriteStartArray();
            if (Params != null && Params.Count > 0)
            {
                foreach (var par in Params)
                {
                    JsonRpcSerializer.Serialize(par, p_writer);
                }
            }
            p_writer.WriteEndArray();

            p_writer.WriteStringValue(Title);
            p_writer.WriteStringValue(Content);

            p_writer.WriteEndArray();
        }