Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ public class SystemTextJsonIpcObjectSerializer : IIpcObjectSerializer
{
internal SystemTextJsonIpcObjectSerializer()
{
JsonSerializerContext = IpcInternalJsonSerializerContext.Default;
// 完全走反射的方式
//JsonSerializerContext = IpcInternalJsonSerializerContext.Default;
}

/// <summary>
Expand All @@ -31,7 +32,7 @@ public SystemTextJsonIpcObjectSerializer(JsonSerializerContext jsonSerializerCon
/// <summary>
/// 获取 JSON 序列化上下文。
/// </summary>
public JsonSerializerContext JsonSerializerContext { get; }
public JsonSerializerContext? JsonSerializerContext { get; }

/// <inheritdoc />
public byte[] Serialize(object? value)
Expand All @@ -41,7 +42,16 @@ public byte[] Serialize(object? value)
return "{}"u8.ToArray();
}

var json = JsonSerializer.Serialize(value, value.GetType(), JsonSerializerContext);
string json;
if (JsonSerializerContext is null)
{
json = JsonSerializer.Serialize(value);
}
else
{
json = JsonSerializer.Serialize(value, value.GetType(), JsonSerializerContext);
}

return Encoding.UTF8.GetBytes(json);
}

Expand All @@ -54,7 +64,14 @@ public void Serialize(Stream stream, object? value)
return;
}

JsonSerializer.Serialize(stream, value, value.GetType(), JsonSerializerContext);
if (JsonSerializerContext is null)
{
JsonSerializer.Serialize(stream, value);
}
else
{
JsonSerializer.Serialize(stream, value, value.GetType(), JsonSerializerContext);
}
}

/// <inheritdoc />
Expand All @@ -65,20 +82,45 @@ public IpcJsonElement SerializeToElement(object? value)
return default;
}

return new IpcJsonElement { RawValueOnSystemTextJson = JsonSerializer.SerializeToElement(value, value.GetType(), JsonSerializerContext), };
JsonElement jsonElement;
if (JsonSerializerContext is null)
{
jsonElement = JsonSerializer.SerializeToElement(value);
}
else
{
jsonElement = JsonSerializer.SerializeToElement(value, value.GetType(), JsonSerializerContext);
}

return new IpcJsonElement { RawValueOnSystemTextJson = jsonElement, };
}

/// <inheritdoc />
public T? Deserialize<T>(byte[] data, int start, int length)
{
var span = data.AsSpan(start, length);
return JsonSerializer.Deserialize<T>(span, (JsonTypeInfo<T>) JsonSerializerContext.GetTypeInfo(typeof(T))!);

if (JsonSerializerContext is null)
{
return JsonSerializer.Deserialize<T>(span);
}
else
{
return JsonSerializer.Deserialize<T>(span, (JsonTypeInfo<T>) JsonSerializerContext.GetTypeInfo(typeof(T))!);
}
}

/// <inheritdoc />
public T? Deserialize<T>(Stream stream)
{
return JsonSerializer.Deserialize<T>(stream, (JsonTypeInfo<T>) JsonSerializerContext.GetTypeInfo(typeof(T))!);
if (JsonSerializerContext is null)
{
return JsonSerializer.Deserialize<T>(stream);
}
else
{
return JsonSerializer.Deserialize<T>(stream, (JsonTypeInfo<T>) JsonSerializerContext.GetTypeInfo(typeof(T))!);
}
}

/// <inheritdoc />
Expand All @@ -88,7 +130,15 @@ public IpcJsonElement SerializeToElement(object? value)
{
return default;
}
return element.Deserialize<T>((JsonTypeInfo<T>) JsonSerializerContext.GetTypeInfo(typeof(T))!);

if (JsonSerializerContext is null)
{
return element.Deserialize<T>();
}
else
{
return element.Deserialize<T>((JsonTypeInfo<T>) JsonSerializerContext.GetTypeInfo(typeof(T))!);
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ public async Task TestShared()
var name = "JsonIpcDirectRoutedProviderTest_1";
var aName = $"IpcObjectTests.IpcTests.{name}.A";
var bName = $"IpcObjectTests.IpcTests.{name}.B";
var aProvider = new IpcProvider(aName, TestJsonContext.CreateIpcConfiguration());
var bProvider = new IpcProvider(bName, TestJsonContext.CreateIpcConfiguration());
var aProvider = new IpcProvider(aName);
var bProvider = new IpcProvider(bName);

var serverProvider = new JsonIpcDirectRoutedProvider(aProvider);
var clientProvider = new JsonIpcDirectRoutedProvider(bProvider);
Expand Down
Loading