Skip to content

Commit e14f60f

Browse files
authored
Merge pull request #170 from dotnet-campus/t/lindexi/Ipc
默认什么都不传入,就使用反射序列化
2 parents 8d2e8c6 + 6b0dd8b commit e14f60f

File tree

2 files changed

+60
-10
lines changed

2 files changed

+60
-10
lines changed

src/dotnetCampus.Ipc/Serialization/SystemTextJsonIpcObjectSerializer.cs

Lines changed: 58 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ public class SystemTextJsonIpcObjectSerializer : IIpcObjectSerializer
1616
{
1717
internal SystemTextJsonIpcObjectSerializer()
1818
{
19-
JsonSerializerContext = IpcInternalJsonSerializerContext.Default;
19+
// 完全走反射的方式
20+
//JsonSerializerContext = IpcInternalJsonSerializerContext.Default;
2021
}
2122

2223
/// <summary>
@@ -31,7 +32,7 @@ public SystemTextJsonIpcObjectSerializer(JsonSerializerContext jsonSerializerCon
3132
/// <summary>
3233
/// 获取 JSON 序列化上下文。
3334
/// </summary>
34-
public JsonSerializerContext JsonSerializerContext { get; }
35+
public JsonSerializerContext? JsonSerializerContext { get; }
3536

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

44-
var json = JsonSerializer.Serialize(value, value.GetType(), JsonSerializerContext);
45+
string json;
46+
if (JsonSerializerContext is null)
47+
{
48+
json = JsonSerializer.Serialize(value);
49+
}
50+
else
51+
{
52+
json = JsonSerializer.Serialize(value, value.GetType(), JsonSerializerContext);
53+
}
54+
4555
return Encoding.UTF8.GetBytes(json);
4656
}
4757

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

57-
JsonSerializer.Serialize(stream, value, value.GetType(), JsonSerializerContext);
67+
if (JsonSerializerContext is null)
68+
{
69+
JsonSerializer.Serialize(stream, value);
70+
}
71+
else
72+
{
73+
JsonSerializer.Serialize(stream, value, value.GetType(), JsonSerializerContext);
74+
}
5875
}
5976

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

68-
return new IpcJsonElement { RawValueOnSystemTextJson = JsonSerializer.SerializeToElement(value, value.GetType(), JsonSerializerContext), };
85+
JsonElement jsonElement;
86+
if (JsonSerializerContext is null)
87+
{
88+
jsonElement = JsonSerializer.SerializeToElement(value);
89+
}
90+
else
91+
{
92+
jsonElement = JsonSerializer.SerializeToElement(value, value.GetType(), JsonSerializerContext);
93+
}
94+
95+
return new IpcJsonElement { RawValueOnSystemTextJson = jsonElement, };
6996
}
7097

7198
/// <inheritdoc />
7299
public T? Deserialize<T>(byte[] data, int start, int length)
73100
{
74101
var span = data.AsSpan(start, length);
75-
return JsonSerializer.Deserialize<T>(span, (JsonTypeInfo<T>) JsonSerializerContext.GetTypeInfo(typeof(T))!);
102+
103+
if (JsonSerializerContext is null)
104+
{
105+
return JsonSerializer.Deserialize<T>(span);
106+
}
107+
else
108+
{
109+
return JsonSerializer.Deserialize<T>(span, (JsonTypeInfo<T>) JsonSerializerContext.GetTypeInfo(typeof(T))!);
110+
}
76111
}
77112

78113
/// <inheritdoc />
79114
public T? Deserialize<T>(Stream stream)
80115
{
81-
return JsonSerializer.Deserialize<T>(stream, (JsonTypeInfo<T>) JsonSerializerContext.GetTypeInfo(typeof(T))!);
116+
if (JsonSerializerContext is null)
117+
{
118+
return JsonSerializer.Deserialize<T>(stream);
119+
}
120+
else
121+
{
122+
return JsonSerializer.Deserialize<T>(stream, (JsonTypeInfo<T>) JsonSerializerContext.GetTypeInfo(typeof(T))!);
123+
}
82124
}
83125

84126
/// <inheritdoc />
@@ -88,7 +130,15 @@ public IpcJsonElement SerializeToElement(object? value)
88130
{
89131
return default;
90132
}
91-
return element.Deserialize<T>((JsonTypeInfo<T>) JsonSerializerContext.GetTypeInfo(typeof(T))!);
133+
134+
if (JsonSerializerContext is null)
135+
{
136+
return element.Deserialize<T>();
137+
}
138+
else
139+
{
140+
return element.Deserialize<T>((JsonTypeInfo<T>) JsonSerializerContext.GetTypeInfo(typeof(T))!);
141+
}
92142
}
93143
}
94144

tests/dotnetCampus.Ipc.Tests/IpcRouteds/DirectRouteds/JsonIpcDirectRoutedProviderTest.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ public async Task TestShared()
2020
var name = "JsonIpcDirectRoutedProviderTest_1";
2121
var aName = $"IpcObjectTests.IpcTests.{name}.A";
2222
var bName = $"IpcObjectTests.IpcTests.{name}.B";
23-
var aProvider = new IpcProvider(aName, TestJsonContext.CreateIpcConfiguration());
24-
var bProvider = new IpcProvider(bName, TestJsonContext.CreateIpcConfiguration());
23+
var aProvider = new IpcProvider(aName);
24+
var bProvider = new IpcProvider(bName);
2525

2626
var serverProvider = new JsonIpcDirectRoutedProvider(aProvider);
2727
var clientProvider = new JsonIpcDirectRoutedProvider(bProvider);

0 commit comments

Comments
 (0)