/// <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(); }
/// <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())); } }
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(); }
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(); }
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(); }