Fehler beim Konvertieren von JSON in .NET-Objekt in asp.net
Ich bin nicht in der Lage zu konvertieren JSON-string zu .net-Objekt in asp.net. Ich sende JSON-string vom client zum server mithilfe von hidden-Feld (halten Sie das JSON-Objekt.Tostring() in hidden-Feld und Lesen das versteckte Feld mit dem Wert im code-behind-Datei)
Json-string/Objekt:
[[{"OfferId":"1","OrderValue":"11","HostingTypeID":"3"},
{"OfferId":"1","OrderValue":"11","HostingTypeID":"3"},
{"OfferId":"1","OrderValue":"11","HostingTypeID":"3"},
{"OfferId":"1","OrderValue":"2","HostingTypeID":"3"},
{"OfferId":"1","OrderValue":"2","HostingTypeID":"3"},
{"OfferId":"1","OrderValue":"67","HostingTypeID":"3"},
{"OfferId":"1","OrderValue":"67","HostingTypeID":"3"}],
[{"OfferId":"1","OrderValue":"99","HostingTypeID":"6"}],
[{"OfferId":"1","OrderValue":"10","HostingTypeID":"8"}]]
.Net-Objekt
public class JsonFeaturedOffer
{
public string OfferId { get; set; }
public string OrderValue { get; set; }
public string HostingTypeID { get; set; }
}
Konvertierung code in code-behind-Datei
byte[] byteArray = Encoding.ASCII.GetBytes(HdnJsonData.Value);
MemoryStream stream = new MemoryStream(byteArray);
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(JsonFeaturedOffer));
object result= serializer.ReadObject(stream);
JsonFeaturedOffer jsonObj = result as JsonFeaturedOffer;
Während der Konvertierung erhalte ich die folgende Fehlermeldung:
Erwartet, element 'root' aus dem namespace ".. Begegnet "Keine" mit dem Namen " namespace ".
InformationsquelleAutor der Frage Vinay Kumar Chella | 2010-04-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Statt dies zu tun, manuell würde ich empfehlen, mit der Baujahr leichte JavaScriptSerializer. Keine Attribute erforderlich sind, auf die Klassen, die Sie wollen, zu serialisieren/Deserialisieren.
Es ist auch mehr flexibler und schneller als der DataContractJsonSerializer, da es sich nicht um die Betreuung über den gesamten wcf-Sachen. Zusätzlich hat Sie generic überlastungendie machen es sehr einfach zu bedienen UND es kann auch mit anonyme Typen.
Serialisierung:
Deserialisierung:
Machen es noch einfacher können Sie erstellen, die Erweiterung Methoden geben Sie die json-Serialisierung/- Deserialisierung direkt auf die Objekte/strings.
InformationsquelleAutor der Antwort ntziolis
Leider keine der vorgeschlagenen Lösungen lösen, die eigentliche Ursache des Problems. Diese Ausnahme bedeutet, dass Ihre deserializer zu Lesen versucht aus dem Ende des stream.
Die Lösung ist, Spulen Sie den stream an den Anfang, dh. legen Sie die
stream.Position = 0;
vor der Deserialisierung.InformationsquelleAutor der Antwort Piotr Szmyd
Wenn Sie wollen, die Klasse zu auto-magisch Serialisierung in json/xml oder Deserialisieren in das Objekt, das Sie brauchen, um es zu schmücken, mit einigen serializable-Attribute:
... und so weiter
InformationsquelleAutor der Antwort amelvin
Wenn dies ist ein array von arrays von JsonFeaturedOffers, sollte es nicht sein:
InformationsquelleAutor der Antwort Nick Gotch