diff --git a/AyCode.Core/Extensions/SerializeObjectExtensions.cs b/AyCode.Core/Extensions/SerializeObjectExtensions.cs index d145687..d55b523 100644 --- a/AyCode.Core/Extensions/SerializeObjectExtensions.cs +++ b/AyCode.Core/Extensions/SerializeObjectExtensions.cs @@ -34,6 +34,7 @@ public static class SerializeObjectExtensions { if (json.StartsWith("\"") && json.EndsWith("\"")) json = Regex.Unescape(json).TrimStart('"').TrimEnd('"'); + //JsonConvert.PopulateObject(json, existingObject); return JsonConvert.DeserializeObject(json, options ?? Options); } @@ -44,6 +45,12 @@ public static class SerializeObjectExtensions return JsonConvert.DeserializeObject(json, toType, options ?? Options); } + public static void JsonTo(this string json, object target, JsonSerializerSettings? options = null) + { + if (json.StartsWith("\"") && json.EndsWith("\"")) json = Regex.Unescape(json).TrimStart('"').TrimEnd('"'); + + JsonConvert.PopulateObject(json, target, options ?? Options); + } /// /// Using JSON /// @@ -52,7 +59,17 @@ public static class SerializeObjectExtensions /// /// [return: NotNullIfNotNull(nameof(src))] - public static TDestination? CloneTo(this object? src, JsonSerializerSettings? options = null) where TDestination : class => src?.ToJson(options).JsonTo(options); + public static TDestination? CloneTo(this object? src, JsonSerializerSettings? options = null) where TDestination : class + => src?.ToJson(options).JsonTo(options); + + /// + /// Using JSON + /// + /// + /// + /// + /// + public static void CopyTo(this object? src, object target, JsonSerializerSettings? options = null) => src?.ToJson(options).JsonTo(target, options); //public static string ToJson(this Expression source) => JsonConvert.SerializeObject(source, Options); diff --git a/AyCode.Services.Server/SignalRs/AcSignalRDataSource.cs b/AyCode.Services.Server/SignalRs/AcSignalRDataSource.cs index f170d8d..ec8bf59 100644 --- a/AyCode.Services.Server/SignalRs/AcSignalRDataSource.cs +++ b/AyCode.Services.Server/SignalRs/AcSignalRDataSource.cs @@ -160,7 +160,7 @@ namespace AyCode.Services.Server.SignalRs [Serializable] [DebuggerDisplay("Count = {Count}")] - public abstract class AcSignalRDataSource : IList, IList, IReadOnlyList + public abstract class AcSignalRDataSource : IList, IList, IReadOnlyList where TDataItem : class, IId where TId : struct where TIList : class, IList { @@ -226,6 +226,8 @@ namespace AyCode.Services.Server.SignalRs } } + public TIList GetReferenceInnerList() => InnerList; + private object[]? GetContextParams() { var parameters = new List();