我有一个带有通用参数的类Response
:
public class Response<T> where T : class {
public bool Result;
public T Data;
}
另外,我有一个带有简单参数的类Instance
public sealed class Instance {
public long Rank { get; set; }
public int ID_Member { get; set; }
}
然后我有一个类,我使用最后一个
public sealed class InstanceResponse : Response<IList<Instance>> { }
我尝试在最后一个类中添加一个构造函数,但不明白该怎么做
我已经尝试过,但它不起作用,JsonString包含序列化类InstanceResponse
public sealed class InstanceResponse : Response<IList<Instance>> {
public InstanceResponse(string JsonString) {
this = JsonConvert.DeserializeObject<InstanceResponse>(JsonString);
}
}
我遇到错误无法分配给“this”,因为它是只读的
怎么可能?
最佳答案
不可能将 json 反序列化为对象并使用 this
关键字将其直接在 ctor 中分配给对象本身。
前提是
Json contains serialized class 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;
}
}
另一个可能的解决方案是在代码中反序列化 json,在某处创建 InstanceResponse
实例(调用的构造函数)。
而不是:
var response = new InstanceResponse(json);
你可以在那里反序列化 json:
var response = JsonConvert.DeserializeObject<InstanceResponse>(json);
附注
话虽如此,@Lasse Vågsæther Karlsen 就这个主题提出了一个有趣的观点。实际上可以给 this
分配一些东西,但它只能在 struct
构造函数内部工作,并且它的用例非常有限......(感谢 Lasse)
关于C# 如何为类创建构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53682804/