命名具有可变内容的对象以在json文件中序列化

时间:2019-04-19 14:22:04

标签: c# json.net

我正在尝试将对象序列化为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"
    }
}

我该怎么办?

2 个答案:

答案 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}
};