WebHU - Programozási kérdések és válaszok

MongoRepository öröklődési sorozási hiba

Amikor az öröklődést a MongoRepository for C#-val próbálom kombinálni, sorosítási hibákat tapasztalok.

Az igazán furcsa, hogy rövid ideig működik, de mondjuk egy újraépítés vagy valami után meghibásodik. Ha kidobom a gyűjteményt és létrehozok egy újat, akkor leállásig vagy újjáépítésig működni fog.

A kódom így néz ki:

public class Organization
{
      // other attributes removed for demonstration simplicity

      public List<Person> People { get;set; }
}

public abstract class Person
{
      public string Id {get;set;}
      public string Name {get;set;}
}

public class Employee : Person 
{
      public string Badge {get;set;}
}

public class Contractor : Person
{
     public string Company {get;set;}
}

Amikor megpróbálom megszerezni:

static MongoRepository<Organization> apps = new MongoRepository<Organization>();
return apps.Single(c => c.Id == id);

A következő hibaüzenetet kapom:

„System.IO.FileFormatException” típusú kivétel történt a MongoDB.Driver.dll fájlban, de nem kezelték a felhasználói kódban

További információ: Hiba történt az API.Models.Organization osztály People tulajdonságának szerializálása közben: Absztrakt osztályok példányai nem hozhatók létre.


Válaszok:


1

A díszítő attribútumok hozzáadása:

[BsonKnownTypes(typeof(Contractor), typeof(Employee))]

hogy az osztályok megoldották a problémát.

10.12.2013
  • További információ a polimorf osztályokkal és a szerilizálással/deserializációval kapcsolatban itt található: docs.mongodb.org/ecosystem/tutorial/ 19.12.2013

  • 2

    Volt egy hasonló probléma, ahol a Person egy absztrakt osztály volt, amely egy másik absztrakt osztálytól örökölt. Nem tetszett az ötlet, hogy Mongo attribútumokat helyezzek el a tartománymodellben, és miután egy kicsit babráltam vele, rájöttem, hogy a Person osztály gyökérként való megjelölése megfelelően szerializálja és deszerializálja:

    BsonClassMap.RegisterClassMap<Person>(cm => {
        cm.SetIsRootClass(true);
    });
    

    Vegye figyelembe, hogy a deszerializálási kivétel azért történt, mert a MongoDB illesztőprogram nem állította be a diszkriminátor _t mezőt.

    07.09.2016
    Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..