Ошибка, преобразовывающая JSON в .NET, возражает в asp.net

Я не могу преобразовать строку JSON в объект .NET в asp.net. Я отправляю строку JSON от клиента к серверу с помощью скрытого поля (путем хранения объекта JSON. Tostring () в скрытом поле и чтении скрытого значения поля в коде позади файла)

Json представляют Объект / в виде строки:

 [[{"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 Object

public class JsonFeaturedOffer
{
    public string OfferId { get; set; }

    public string OrderValue { get; set; }

    public string HostingTypeID { get; set; }
}

Converstion кодируют в коде позади файла

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;

При преобразовании я получаю следующую ошибку:

Ожидание элемента 'базируется' от пространства имен ''.. Встреченный 'Ни один' с именем'', пространство имен ''.

36
задан Vinay Kumar Chella 19 April 2010 в 15:25
поделиться

3 ответа

Вместо того, чтобы делать это вручную, я бы рекомендовал использовать , встроенный в облегченный JavaScriptSerializer . Атрибуты не требуются для классов, которые вы хотите сериализовать / десериализовать.

Он также более гибок и быстрее , чем DataContractJsonSerializer, поскольку ему не нужно заботиться обо всем, что касается wcf. Кроме того, он имеет общих перегрузок , которые делают его очень простым в использовании, И он также может обрабатывать анонимные типы .

Сериализация:

var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
var objectAsJsonString = serializer.Serialize(objectToSerialize);

Десериализация:

var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
JsonFeaturedOffer deserializedObject = serializer.Deserialize<JsonFeaturedOffer>(s_JsonBaseDate);

Чтобы сделать это еще проще, вы можете создать методы расширения, которые предоставят вам сериализацию / десериализацию json непосредственно на объектах / строках.

34
ответ дан 27 November 2019 в 05:15
поделиться

Если это массив массивов JsonFeaturedOffers, не должно быть:

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[][];
2
ответ дан 27 November 2019 в 05:15
поделиться

Если вы хотите, чтобы класс автоматически сериализовался в json / xml или десериализовался в объекте, вам необходимо украсить его некоторыми сериализуемыми атрибутами:

[Serializable, XmlRoot("JsonFeaturedOffer"), DataContract(Name="JsonFeaturedOffer")]
public class JsonFeaturedOffer  
{
    [XmlElement ("OfferId"), DataMember(Name="OfferId")]
    public string OfferId {get; set;}

... и так далее

3
ответ дан 27 November 2019 в 05:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: