C#json反序列化到(此)内部对象
我正在尝试将一个对象反序列化到自身中。我有以下几点:-C#json反序列化到(此)内部对象,c#,json,C#,Json,我正在尝试将一个对象反序列化到自身中。我有以下几点:- public class JobID { public string jobname; public string first; public string second; public string third; public string clientName; public string workflow; }
public class JobID
{
public string jobname;
public string first;
public string second;
public string third;
public string clientName;
public string workflow;
}
public void load(string fname)
{
string s = File.ReadAllText(fname);
this = JsonConvert.DeserializeObject<JobID>(s);
}
公共类JobID
{
公共字符串作业名;
公共字符串优先;
公共字符串第二;
公共字符串第三;
公共字符串clientName;
公共字符串工作流;
}
公共无效载荷(字符串fname)
{
字符串s=File.ReadAllText(fname);
this=JsonConvert.DeserializeObject;
}
但根据我得到的错误,这个词是“只读”的。
我使用了'this.jobname=“X”;'在此之前,很明显“这”不是只读的。
我使用的是Newtonsof.Json。虽然可以为“this”的属性赋值,但不能更改“this”所指的对象 “this”关键字引用上下文()中的当前对象实例 假设加载函数位于另一个对象(或静态对象)内,可以执行以下操作:
public class JobID
{
public string jobname;
public string first;
public string second;
public string third;
public string clientName;
public string workflow;
}
public class JobReader
{
// Property to store deserialized object
public JobID Job { get; set; }
public void load(string fname)
{
string s = File.ReadAllText(fname);
// Assign object to property.
this.JobID = JsonConvert.DeserializeObject<JobID>(s);
}
}
公共类JobID
{
公共字符串作业名;
公共字符串优先;
公共字符串第二;
公共字符串第三;
公共字符串clientName;
公共字符串工作流;
}
公营职业读取器
{
//属性来存储反序列化的对象
PublicJobID作业{get;set;}
公共无效载荷(字符串fname)
{
字符串s=File.ReadAllText(fname);
//将对象指定给属性。
this.JobID=JsonConvert.DeserializeObject;
}
}
为什么不使用静态方法加载对象。例如:
public class JobID
{
public string jobname;
public string first;
public string second;
public string third;
public string clientName;
public string workflow;
public static JobId Load(string fname){
string s = File.ReadAllText(fname);
return JsonConvert.DeserializeObject<JobID>(s);
}
}
公共类JobID
{
公共字符串作业名;
公共字符串优先;
公共字符串第二;
公共字符串第三;
公共字符串clientName;
公共字符串工作流;
公共静态作业ID加载(字符串fname){
字符串s=File.ReadAllText(fname);
返回JsonConvert.DeserializeObject;
}
}
您可以使用Xbotter建议的静态方法创建新实例。但出于某种原因,如果您只想将文件内容反序列化为当前对象,那么最简单的方法是:
public class JobID
{
public string jobname;
public string first;
public string second;
public string third;
public string clientName;
public string workflow;
public void load(string fname)
{
string s = File.ReadAllText(fname);
JobID tmp = JsonConvert.DeserializeObject<JobID>(s);
copy(tmp);
}
public void copy(JobID tmp)
{
this.jobname = tmp.jobname;
// do the same for other properties that you want to copy
}
}
公共类JobID
{
公共字符串作业名;
公共字符串优先;
公共字符串第二;
公共字符串第三;
公共字符串clientName;
公共字符串工作流;
公共无效载荷(字符串fname)
{
字符串s=File.ReadAllText(fname);
JobID tmp=JsonConvert.DeserializeObject;
副本(tmp);
}
公开作废副本(JobID tmp)
{
this.jobname=tmp.jobname;
//对要复制的其他属性执行相同的操作
}
}
如果要在不使用静态方法的情况下执行此操作,可以使用。示例代码:
public class JobID
{
public string jobname;
public string first;
public string second;
public string third;
public string clientName;
public string workflow;
public void load(string fname)
{
string s = File.ReadAllText(fname);
new JsonSerializer().Populate(new JsonTextReader(new StringReader(s)), this);
}
}
C和C是两种不同的语言。请使用正确的标记。我现在明白了,因为JsonConvert创建对象,而不仅仅是填充对象。(灯亮了!)我学到了一些新东西——至少是如何用这种方式使用静电——谢谢。