我正在尝试将对象序列化为JSON文件,但是问题是我想给JSON对象一个可变的内容名称。
我认为我可以做这样的事情:
string codfis = "Example1";
var jsonCF = new {
codfis = new { // codfis is the name of the variable as you can see
Cognome = vcgm,
Nome = vnm,
Sesso = ss,
LuogoDiNascita = ldn,
Provincia = pr,
DataDiNascita = ddn
}
};
using (StreamWriter file = File.CreateText("CodFisCalcolati.json")) {
JsonSerializer serializer = new JsonSerializer();
serializer.Serialize(file, jsonCF);
}
但是很明显,这没有达到我想要的效果:
{
"codfis": { // it named the json object like this, and not "Example1" like above
"Cognome": "Yoyo",
"Nome": "OK!",
"Sesso": "Nice",
"LuogoDiNascita": "Good",
"Provincia": "Perfect",
"DataDiNascita": "Fine"
}
}
我也尝试过这个:
string codfis = "Example1";
var jsonCF = new {
[codfis] = new { // putting brackets on the variable
Cognome = vcgm,
Nome = vnm,
Sesso = ss,
LuogoDiNascita = ldn,
Provincia = pr,
DataDiNascita = ddn
}
};
但是它给了我一个语法错误。
所以我只想做这个...
{
"Example1": {
"Cognome": "Yoyo",
"Nome": "OK!",
"Sesso": "Nice",
"LuogoDiNascita": "Good",
"Provincia": "Perfect",
"DataDiNascita": "Fine"
}
}
我该怎么办?
答案 0 :(得分:3)
与评论中提到的其他OPS一样,创建字典并将其序列化
string codfis = "Example1";
var codfisValue = new
{ // codfis is the name of the variable as you can see
Cognome = "vcgm",
Nome = "vnm",
Sesso = "ss",
LuogoDiNascita = "ldn",
Provincia = "pr",
DataDiNascita = "ddn"
};
var jsonCF = new Dictionary<string, object>();
jsonCF.Add(codfis, codfisValue);
using (StreamWriter file = File.CreateText("CodFisCalcolati.json"))
{
JsonSerializer serializer = new JsonSerializer();
serializer.Serialize(file, jsonCF);
}
答案 1 :(得分:1)
事实上,这是匿名对象,实际上已正确序列化。从未使用在jsonCF对象外部初始化的codfis对象。您实际上是在创建一个全新的对象来表示对象内部的属性。
“解决方案”取决于您要对此序列化项目执行的操作。您只需要引用现有变量即可,而不是创建新变量。另外,如果您只想将该属性的名称设为Example1
,则将其设置为:
var jsonCF = new {
Example1 = new { //Note the property name
Cognome = vcgm,
Nome = vnm,
Sesso = ss,
LuogoDiNascita = ldn,
Provincia = pr,
DataDiNascita = ddn
}
};
或者,
var codfis = new {
Cognome = vcgm,
Nome = vnm,
Sesso = ss,
LuogoDiNascita = ldn,
Provincia = pr,
DataDiNascita = ddn
};
var jsonConf = new {
Example1 = codfis
}
如果您希望属性名称和值都不同,那么您可能会在词典之后而不是这样做
var codfisName = "Example1";
var jsonConf = new Dictionary<string, object>{
{codfisName, codfis}
};