Я не могу преобразовать строку 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;
При преобразовании я получаю следующую ошибку:
Ожидание элемента 'базируется' от пространства имен ''.. Встреченный 'Ни один' с именем'', пространство имен ''.
Вместо того, чтобы делать это вручную, я бы рекомендовал использовать , встроенный в облегченный 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 непосредственно на объектах / строках.
Если это массив массивов 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[][];
Если вы хотите, чтобы класс автоматически сериализовался в json / xml или десериализовался в объекте, вам необходимо украсить его некоторыми сериализуемыми атрибутами:
[Serializable, XmlRoot("JsonFeaturedOffer"), DataContract(Name="JsonFeaturedOffer")]
public class JsonFeaturedOffer
{
[XmlElement ("OfferId"), DataMember(Name="OfferId")]
public string OfferId {get; set;}
... и так далее