Hoe u deseriliseert op de juiste manier wanneer u Json naar ASP.NET MVC-acties plaatst, waar het model subklassen heeft

Ik heb een probleem waarbij bij het verzenden van JSON naar een bepaalde actie op een MVC-controller, die actie een model accepteert met een lijst met items. Deze items kunnen verschillende objecten zijn, omdat ze allemaal subklassen zijn van een algemene abstracte klasse.

Is er een manier om de JSON zo te maken dat deze, wanneer deze de deserilisatie veroorzaakt, weet hoe de objecten terug in de juiste typen moeten worden omgezet?

1
Als u JSON.NET niet gebruikt, moet u een subclassing-parsing opgeven met annotaties of configuratie.
toegevoegd de auteur ryudice, de bron
dus met json.net hoe haak je het in als een waardevoorziening en krijgt het om deserialiserende subklassen te verwerken?
toegevoegd de auteur Keith Nicholas, de bron

1 antwoord

    void Main()
{
System.Web.Script.Serialization.JavaScriptSerializer serializer = new   System.Web.Script.Serialization.JavaScriptSerializer();
 MainModel model = new MainModel(){SimpleProperty = "I am simple property",   ComplexProperty = new ComplexProperty(){Foo="test", Bar="data"}};
   var result = serializer.Serialize(model);

}

public class MainModel
  {
      public string SimpleProperty {get;set;}
      public ComplexProperty ComplexProperty {get;set;}
}

 public class ComplexProperty 
  {
public string Bar {get;set;}
public string Foo {get;set;}

  }

Het resultaat van de serialisatie ziet er als volgt uit: {"SimpleProperty": "Ik ben een eenvoudige eigenschap", "ComplexProperty": {"Bar": "data", "Foo": "test"}}

Ik hoop dat het helpt!

0
toegevoegd
dit is niet wat de vraag was ...
toegevoegd de auteur Keith Nicholas, de bron
nee, wat nodig was, was een manier om een ​​objectgrafiek te maken die json met subklassen kon deserialiseren .... bijvoorbeeld, als je voorbeeld een basisklasse-complex had, erf je ComplexProperty ervan af en was er een andere klasse met de naam EvenMoreComplex die het ook erven, dan in MainModel heb je een verwijzing naar Complex, wat een van de drie types zou kunnen zijn. In Json.Net is er de mogelijkheid om type-informatie in json te serialiseren, dus wanneer je het deserialiseert, zal het het juiste type object opnieuw creëren
toegevoegd de auteur Keith Nicholas, de bron
Vergat te vermelden dat var query = serializer. Beschrijving (resultaat);
toegevoegd de auteur Aadil, de bron
Oh ik dacht dat het vroeg hoe je het kon deserialiseren naar het juiste originele type dat ik in mijn oorspronkelijke antwoord misliep, maar dat later in reacties werd geplaatst. Is dat wat je zocht?
toegevoegd de auteur Aadil, de bron