refine json converter

This commit is contained in:
Jicheng Lu 2024-03-25 14:12:08 -05:00
parent 4d99bf788c
commit 7f15dcd8a3
3 changed files with 26 additions and 4 deletions

View file

@ -16,7 +16,7 @@ public class RichContentJsonConverter : JsonConverter<IRichMessage>
if (root.TryGetProperty("rich_type", out JsonElement element))
{
var richType = element.GetString();
res = parser.ParseRichMessage(richType, jsonText, options);
res = parser.ParseRichMessage(richType, jsonText, root, options);
}
return res;

View file

@ -16,7 +16,7 @@ public class TemplateMessageJsonConverter : JsonConverter<ITemplateMessage>
if (root.TryGetProperty("template_type", out JsonElement element))
{
var templateType = element.GetString();
res = parser.ParseTemplateMessage(templateType, jsonText, options);
res = parser.ParseTemplateMessage(templateType, jsonText, root, options);
}
return res;

View file

@ -12,7 +12,7 @@ public class MessageParser
{
}
public IRichMessage? ParseRichMessage(string richType, string jsonText, JsonSerializerOptions options)
public IRichMessage? ParseRichMessage(string richType, string jsonText, JsonElement root, JsonSerializerOptions options)
{
IRichMessage? res = null;
@ -36,11 +36,22 @@ public class MessageParser
{
res = JsonSerializer.Deserialize<TextMessage>(jsonText, options);
}
else if (richType == RichTypeEnum.GenericTemplate)
{
if (root.TryGetProperty("element_type", out var element))
{
var elementType = element.GetString();
if (elementType == typeof(GenericElement).Name)
{
res = JsonSerializer.Deserialize<GenericTemplateMessage<GenericElement>>(jsonText, options);
}
}
}
return res;
}
public ITemplateMessage? ParseTemplateMessage(string templateType, string jsonText, JsonSerializerOptions options)
public ITemplateMessage? ParseTemplateMessage(string templateType, string jsonText, JsonElement root, JsonSerializerOptions options)
{
ITemplateMessage? res = null;
@ -60,6 +71,17 @@ public class MessageParser
{
res = JsonSerializer.Deserialize<ProductTemplateMessage>(jsonText, options);
}
else if (templateType == TemplateTypeEnum.Generic)
{
if (root.TryGetProperty("element_type", out var element))
{
var elementType = element.GetString();
if (elementType == typeof(GenericElement).Name)
{
res = JsonSerializer.Deserialize<GenericTemplateMessage<GenericElement>>(jsonText, options);
}
}
}
return res;
}