c# - new - mongoose aggregate select



Deserialisieren von Jsons zu C#-Listen mit vorhandenen Elementen (1)

Angesichts der folgenden Klassen:

class Report {

    public Report() {
        this.Fields=new List<Field>();
    }

    [JsonProperty("fields")]
    public IList<Field> Fields { get; private set; }
}

class Field {

    [JsonProperty("identifier")]
    public Guid Identfier { get;set; }

    [JsonProperty("name")]
    public string Name { get;set; }
}

und die folgende Testmethode eingerichtet:

var report = new Report();
report.Fields.Add(new Field { Identifier = new Guid("26a94eab-3d50-4330-8203-e7750abaa060"), Name = "Field 1" });
report.Fields.Add(new Field { Identifier = new Guid("852107db-b5d1-4344-9f71-7bd90b96fec0"), Name = "Field 2" });

var json = "{\"fields\":[{\"identifier\":\"852107db-b5d1-4344-9f71-7bd90b96fec0\",\"name\":\"name changed\"},{\"identifier\":\"ac424aff-22b5-4bf3-8232-031eb060f7c2\",\"name\":\"new field\"}]}";

JsonConvert.PopulateObject(json, report);

Assert.IsTrue(report.Fields.Count == 2, "The number of fields was incorrect.");

Wie erhalte ich JSON.Net, um zu wissen, dass das Feld mit der Kennung "852107db-b5d1-4344-9f71-7bd90b96fec0" für das vorhandene Feld mit der gleichen Kennung gelten soll?

Außerdem ist es möglich, JSON.Net dazu zu bringen, Elemente zu entfernen, die nicht in dem angegebenen JSON-Array vorhanden sind (speziell das Feld mit der Kennung "26a94eab-3d50-4330-8203-e7750abaa060" sollte entfernt werden, da es in der nicht existiert JSON-Array gegeben.

Wenn es eine Möglichkeit gibt, die Art und Weise, wie JSON eine Liste analysiert, manuell zu codieren oder zu überschreiben, wäre das besser, weil ich den Code schreiben könnte, um zu sagen "Dies ist das Element, das du brauchst" oder "benutze dieses neu erstellte Element" oder einfach "don tue nichts mit diesem Gegenstand, weil ich ihn entfernt habe ". Weiß jemand eine Art wie ich das bitte machen kann?


Sie können die Option ObjectCreationHandling = ObjectCreationHandling.Replace .

Sie können dies für Ihr gesamtes Datenmodell mithilfe von Serializer-Einstellungen tun, wie in der Json.Net PopulateObject Appending-Liste anstelle des Einstellungswerts angezeigt :

    var serializerSettings = new JsonSerializerSettings {ObjectCreationHandling = ObjectCreationHandling.Replace};
    JsonConvert.PopulateObject(json, report, serializerSettings);

Oder Sie können die Option für das JsonProperty Attribut JsonProperty , das Sie bereits verwenden, wenn Sie dies nicht universell durchführen möchten:

class Report
{
    public Report()
    {
        this.Fields = new List<Field>();
    }

    [JsonProperty("fields", ObjectCreationHandling = ObjectCreationHandling.Replace)]
    public IList<Field> Fields { get; private set; }
}




json.net