这是我想写在最后的代码:
var notification = NotificationFactory.FromJson(jsonString);
if (notification is UserUpdateProfileNotification)
{
// notification is of type UserUpdateProfileNotification so I can access notification.Payload.AccoundId
}
这是我目前所尝试的:
public abstract class Notification<T>
{
public string Type { get; set; }
public T Payload { get; set; }
}
public class UserUpdateProfileNotificationPayload
{
public Guid AccountId { get; set; }
}
public class UserUpdateProfileNotification: Notification<UserUpdateProfileNotificationPayload>
{
public UserUpdateProfileNotification(UserUpdateProfileNotificationPayload payload)
{
Type = "USER_UPDATE_PROFILE";
Payload = payload;
}
}
public static class NotificationFactory
{
public static Notification<object> FromJson(string notification)
{
var parsedNotif = JsonSerializer.Deserialize<Notification<object>>(notification);
if (parsedNotif.Type == "USER_UPDATE_PROFILE")
{
var concreteType = JsonSerializer.Deserialize<UserUpdateProfileNotification>(notification);
return new UserUpdateProfileNotification(concreteType.Payload);
}
throw new NotImplementedException();
}
}
我得到的错误:
不能隐式地将类型UserUpdateProfileNotify转换为Notification
对我来说,转换通知
我发现您的代码有编译错误,但是如果您按照以下方式修改FromJson中的代码,那么它应该可以工作
public static T FromJson<T>(string notification)
{
var parsedNotif = System.Text.Json.JsonSerializer.Deserialize<Notification<object>>(notification);
if (parsedNotif.Type == "USER_UPDATE_PROFILE")
{
var payload = System.Text.Json.JsonSerializer.Deserialize<UserUpdateProfileNotificationPayload>(parsedNotif.Payload.ToString());
object userUpdateProfileNotification = new UserUpdateProfileNotification(payload);
return (T) userUpdateProfileNotification;
}
throw new NotImplementedException();
}
我得到了一些工作(我使用动态而不是通知和模式匹配工作)
工厂
public class NotificationFactory
{
public static dynamic FromJson(string notification)
{
var parsedNotif = JsonSerializer.Deserialize<Notification<dynamic>>(notification);
if (parsedNotif.Type == "USER_UPDATE_PROFILE")
{
var concreteType = JsonSerializer.Deserialize<UserUpdateProfileNotification>(notification);
return new UserUpdateProfileNotification(concreteType.Payload);
}
throw new NotImplementedException();
}
}
我如何使用:
var notification = NotificationFactory.FromJson(item);
if (notification is UserUpdateProfileNotification notif)
{
log.LogInformation($"{notif.Payload.AccountId}");
}
双重解析不是最优的,但在我的情况下是可以接受的
我们正在使用eclipse开普勒服务发布2,Tomcat 7.0.64,JDk1.7。我们以前使用的是流口水5.4.0,现在我们已经升级了流口水6.2.0。作为升级的一部分,我们在构建路径和Web应用程序库文件夹中添加了以下文件。 1.drools-compiler-6.2.0。期末考试-红帽-4。罐子 2。drools-core-6.2.0。期末考试-红帽-4。罐子 3。ecj-4.3.1。罐子
我有两个从抽象类继承的类,它们有父子关系。 所以我使用了注释OneToOne和ManyToOne,但是子类中的父实体总是为空。有人能帮我吗,我花了几个小时谷歌和测试了许多conf,但没有成功。 这些是我的类中的代码: ... ... ... 如果我不添加@JoinCol列注释,JPA会创建一个关联表,但无法检索父级,而关联可以直接通过在数据库中请求来完成。 非常感谢你的帮助。 祝好
我正在运行《docker compose》中的jenkins,来自图片jenkins/jenkins。升级到Jenkins 2.277.1后,LDAP身份验证停止工作,我无法登录。我收到以下错误: 詹金斯。docker。new\u 1 | 2021 06-04 14:49:31.3110000[id=138]警告o.j.p.p.DiskUsageCollector#collect:无法获取磁盘使用
我正在使用QT Creator在Ubuntu上制作一个C++程序。我编写的程序编译得很好,直到我决定开始使用C++11而不是C++98(这是QT Creator中的默认值)。我使用的是自己的cmake文件,而不是qmake,为此,我在中包含了以下一行: 在转移到C++11之后,我在行得到一个错误。这是因为,据我所见,变量在任何地方都没有定义,尽管定义了变量。 因此,我有两个问题: 1)为什么变量没
问题内容: 我当前正在将Hibernate版本升级到最新版本5.2.10。我将HibernateUtil中的代码替换为SessionFactory创建。 4.3.11 Final(Previous) : 5.2.10决赛(新): 现在,我有了一个方法,该方法通过将数据库表名称作为字符串传递来获取列名称列表。我之前在4.3.11.Final中这样做过: 现在,升级后,它显示方法getAllClass
我目前正在花时间将我的项目从Laravel 4.2升级到Laravel 5.2。 在经历了很多麻烦之后,我设法使5.1版本正常运行,因此我启动了5.1到5.2程序,如官方文件中所述:https://laravel.com/docs/5.2/upgrade#upgrade-5.2.0 第一步之后,我的composer.json是这样的: 我还更新了app.php配置以删除提供程序部分中的Artisa