C# 如何将JObject转换为T型
我试图给T型字段赋值,代码如下:C# 如何将JObject转换为T型,c#,generics,C#,Generics,我试图给T型字段赋值,代码如下: JObject jobject = JObject.Parse(strEventData); EventData = jobject.SelectToken("ChangeSet").ToObject<Client>(); 您可以使用下面的泛型方法将T转换为实际类,如 public static T MyGenericMethod<T>(string strEventData) where T : class { JObject
JObject jobject = JObject.Parse(strEventData);
EventData = jobject.SelectToken("ChangeSet").ToObject<Client>();
您可以使用下面的泛型方法将T转换为实际类,如
public static T MyGenericMethod<T>(string strEventData) where T : class
{
JObject jobject = JObject.Parse(strEventData);
T result = jobject.SelectToken("ChangeSet").ToObject<T>();
return result;
}
public static T MyGenericMethod(string strEventData),其中T:class
{
JObject-JObject=JObject.Parse(strEventData);
T result=jobject.SelectToken(“变更集”).ToObject();
返回结果;
}
你可以像这样使用它
var EventData = MyGenericMethod<Client>(strEventData);
var EventData=MyGenericMethod(strEventData);
编辑:
更新了与OP聊天的答案
public struct EventDescriptor<T>
{
public Guid AggregateId;
public T EventData;
public long TimeStamp;
public ChangeType EventType;
public int Version;
public EventDescriptor(Guid id, IEvent eventData)
{
AggregateId = id;
var strEventData = JsonConvert.SerializeObject(eventData, new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.Auto });
EventData = MyGenericMethod(strEventData);
Version = 1;
TimeStamp = (long)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalMilliseconds;
EventType = (ChangeType)Enum.Parse(typeof(ChangeType), eventData.GetType().GetGenericArguments().First().Name);
}
public static T MyGenericMethod(string strEventData)
{
JObject jobject = JObject.Parse(strEventData);
T result = jobject.SelectToken("ChangeSet").ToObject<T>();
return result;
}
}
public struct EventDescriptor
{
公共Guid聚合EID;
公共事件数据;
公共长时间戳;
公共变更类型EventType;
公共int版本;
公共事件描述符(Guid id、IEvent eventData)
{
AggregateId=id;
var strEventData=JsonConvert.SerializeObject(eventData,新的JsonSerializerSettings(){TypeNameHandling=TypeNameHandling.Auto});
EventData=MyGenericMethod(strEventData);
版本=1;
TimeStamp=(long)(DateTime.UtcNow-newdatetime(1970,1,1)).total毫秒;
EventType=(ChangeType)Enum.Parse(typeof(ChangeType),eventData.GetType().GetGenericArguments().First().Name);
}
公共静态T MyGenericMethod(字符串strEventData)
{
JObject-JObject=JObject.Parse(strEventData);
T result=jobject.SelectToken(“变更集”).ToObject();
返回结果;
}
}
显示此T
来自何处的代码?@er Mfahhhgk在上面添加的,并且上面抛出错误的代码在泛型方法内还是在普通方法内?显示方法签名吗?在普通的methodohh中,您需要一个泛型方法,该方法接受T作为您指定的类。我得到的是相同的errorEventData是T的一种类型
public struct EventDescriptor<T>
{
public Guid AggregateId;
public T EventData;
public long TimeStamp;
public ChangeType EventType;
public int Version;
public EventDescriptor(Guid id, IEvent eventData)
{
AggregateId = id;
var strEventData = JsonConvert.SerializeObject(eventData, new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.Auto });
EventData = MyGenericMethod(strEventData);
Version = 1;
TimeStamp = (long)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalMilliseconds;
EventType = (ChangeType)Enum.Parse(typeof(ChangeType), eventData.GetType().GetGenericArguments().First().Name);
}
public static T MyGenericMethod(string strEventData)
{
JObject jobject = JObject.Parse(strEventData);
T result = jobject.SelectToken("ChangeSet").ToObject<T>();
return result;
}
}