C# 如何将JObject转换为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

我试图给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.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;
    }
}