Igo*_*ova 2 c# generics .net-core
我有一个Response带泛型参数的类:
public class Response<T> where T : class {
public bool Result;
public T Data;
}
Run Code Online (Sandbox Code Playgroud)
另外,我有一个Instance简单参数的类
public sealed class Instance {
public long Rank { get; set; }
public int ID_Member { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个课程,我使用最后一个
public sealed class InstanceResponse : Response<IList<Instance>> { }
Run Code Online (Sandbox Code Playgroud)
我尝试在最后一堂课中添加一个构造函数,但不明白该怎么做
我尝试过那样,但它不起作用,JsonString包含序列化类InstanceResponse
public sealed class InstanceResponse : Response<IList<Instance>> {
public InstanceResponse(string JsonString) {
this = JsonConvert.DeserializeObject<InstanceResponse>(JsonString);
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个错误 Cannot assign to 'this' because it is read-only
怎么可能?
无法将json反序列化为对象,并使用this关键字将其直接分配给对象本身.
只要
Json包含序列化类InstanceResponse
你可以这样做:
public sealed class InstanceResponse : Response<IList<Instance>> {
public InstanceResponse(string JsonString) {
var response = JsonConvert.DeserializeObject<InstanceResponse>(JsonString);
this.Data = response.Data;
this.Result = response.Result;
}
}
Run Code Online (Sandbox Code Playgroud)
另一种可能的解决方案是在代码中反序列化json,该代码在InstanceResponse某处创建(call's ctor)实例.
代替:
var response = new InstanceResponse(json);
Run Code Online (Sandbox Code Playgroud)
您可以在那里反序列化json:
var response = JsonConvert.DeserializeObject<InstanceResponse>(json);
Run Code Online (Sandbox Code Playgroud)
PS
话虽如此,@LasseVågsætherKarlsen提出了一个有趣的观点.实际上可以分配一些东西,this但它只在一个structstor中工作,而用例非常有限......(谢谢Lasse)