Я пытаюсь сериализовать объект в файл 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
Alwe 19 Апр 2019 в 17:22

2 ответа

Лучший ответ

Как другие 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);
}
3
RajN 19 Апр 2019 в 14:53

Тот факт, что это анонимный объект, фактически сериализуется правильно. Объект codfis, инициализированный вне объекта jsonCF, никогда не используется. вы на самом деле создаете совершенно новый объект для представления свойства внутри вашего объекта.

«Решение» зависит от того, что вы хотите сделать с этим сериализованным элементом. Вам просто нужно сослаться на вашу существующую переменную, а не создавать новую, если это то, что вам нужно. В качестве альтернативы, если вы просто хотите, чтобы имя этого свойства было 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}
};

1
istrupin 19 Апр 2019 в 15:00