C#如何制作类的构造函数

C#如何制作类的构造函数,c#,generics,.net-core,C#,Generics,.net Core,我有一个类响应,带有通用参数: public class Response<T> where T : class { public bool Result; public T Data; } 然后我有一节课,我用最后一节课 public sealed class InstanceResponse : Response<IList<Instance>> { } 公共密封类InstanceResponse:Response{} 我试图在最后一个类中添

我有一个类
响应
,带有通用参数:

public class Response<T> where T : class {
  public bool Result;
  public T Data;
}
然后我有一节课,我用最后一节课

public sealed class InstanceResponse : Response<IList<Instance>> { }
公共密封类InstanceResponse:Response{}
我试图在最后一个类中添加一个构造函数,但不知道该如何做

我曾经尝试过类似的方法,但它不起作用,JsonString包含序列化的类InstanceResponse

public sealed class InstanceResponse : Response<IList<Instance>> {
  public InstanceResponse(string JsonString) {
    this = JsonConvert.DeserializeObject<InstanceResponse>(JsonString);
  }
}
公共密封类InstanceResponse:响应{
公共InstanceResponse(字符串JsonString){
this=JsonConvert.DeserializeObject(JsonString);
}
}
我有一个错误
无法分配给“this”,因为它是只读的


怎么可能呢?

不可能使用
这个
关键字将json反序列化到对象,并在ctor中将其直接分配到对象本身

只要

Json包含序列化的类InstanceResponse

public sealed class InstanceResponse : Response<IList<Instance>> {
  public InstanceResponse(string JsonString) {
    this = JsonConvert.DeserializeObject<InstanceResponse>(JsonString);
  }
}
您可以这样做:

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;
  }
}
您可以在此处反序列化json:

var response = JsonConvert.DeserializeObject<InstanceResponse>(json);
var response=JsonConvert.DeserializeObject(json);
附言


说到这里,@Lasse Vågsæther Karlsen就这个问题提出了一个有趣的观点。实际上,可以将某些内容分配给
,但是它仅在
结构
的构件内工作,并且它的用例非常有限…(感谢Lasse)

请定义“不工作”。这是编译错误吗?运行时错误?有什么错误吗?不做你想做的事?@SamiKuhmonen我有一个错误
无法分配给“this”,因为它是只读的
是的,
始终是只读的,因为它是当前对象。你来这里的目的是什么?你的意思是
Data=…
还是类似的东西?@SamiKuhmonen用
Data
Result
进行了完整的分类,这并不能解释很多问题。请您提供一个或至少JSON包含什么或什么?只是一些不必要的信息:您可以在structs的构造函数中分配给
this
。但这不是一条非常有用的信息。这通常在“复制构造函数”中完成。我能想到的唯一有用的东西,除了知道它是什么,如果你看到它。
var response = JsonConvert.DeserializeObject<InstanceResponse>(json);