Подтвердить что ты не робот

Deserialize строка JSON для объекта С#

Мое приложение находится в Asp.Net MVC3, закодированном на С#. Это мое требование. Я хочу объект, который находится в следующем формате. Этот объект должен быть достигнут, когда я десериализую строку Json.

var obj1 = new { arg1=1,arg2=2 };

enter image description here

После использования кода ниже:

string str = "{\"Arg1\":\"Arg1Value\",\"Arg2\":\"Arg2Value\"}";
JavaScriptSerializer serializer1 = new JavaScriptSerializer();
object obje = serializer1.Deserialize<object>(str);

Объект, который я получаю i.e obje, не действует как obj1

enter image description here

Здесь в этом примере моя строка JSON статична, но на самом деле строка JSON будет динамически созданной средой выполнения, поэтому я не буду постоянно получать Arg1 и Arg2.

4b9b3361

Ответ 1

Я думаю, что JavaScriptSerializer не создает динамический объект.

Итак, сначала вы должны определить класс:

class MyObj {
    public int arg1 {get;set;}
    public int arg2 {get;set;}
}

И десериализуйте это вместо object:

serializer.Deserialize<MyObj>(str);

Не тестируйте, пожалуйста, попробуйте.

Ответ 2

Я считаю, что вы ищите это:

string str = "{\"Arg1\":\"Arg1Value\",\"Arg2\":\"Arg2Value\"}";
JavaScriptSerializer serializer1 = new JavaScriptSerializer();
object obje = serializer1.Deserialize(str, obj1.GetType());

Ответ 3

Используйте этот код:

var result=JsonConvert.DeserializeObject<List<yourObj>>(jsonString);

Ответ 4

Это может быть полезно:

var serializer = new JavaScriptSerializer();
dynamic jsonObject = serializer.Deserialize<dynamic>(json);

Где "json" - это строка, содержащая значения JSON. Затем для извлечения значений из jsonObject вы можете использовать

myProperty = Convert.MyPropertyType(jsonObject["myProperty"]);

Изменение типа MyPropertyType на соответствующий тип (ToInt32, ToString, ToBoolean и т.д.).

Ответ 5

То же самое случилось со мной. Поэтому, если служба возвращает ответ как строку JSON, вы должны сначала десериализовать строку, тогда вы сможете десериализовать тип объекта из нее должным образом:

string json= string.Empty;
using (var streamReader = new StreamReader(response.GetResponseStream(), true))
        {
            json= new JavaScriptSerializer().Deserialize<string>(streamReader.ReadToEnd());

        }
//To deserialize to your object type...
MyType myType;
using (var memoryStream = new MemoryStream())
         {
            byte[] jsonBytes = Encoding.UTF8.GetBytes(@json);
            memoryStream.Write(jsonBytes, 0, jsonBytes.Length);
            memoryStream.Seek(0, SeekOrigin.Begin);
            using (var jsonReader = JsonReaderWriterFactory.CreateJsonReader(memoryStream, Encoding.UTF8,          XmlDictionaryReaderQuotas.Max, null))
            {
                var serializer = new DataContractJsonSerializer(typeof(MyType));
                myType = (MyType)serializer.ReadObject(jsonReader);

            }
        }

4 Конечно, это сработает....;)

Ответ 6

решение:

 public Response Get(string jsonData) {
     var json = JsonConvert.DeserializeObject<modelname>(jsonData);
     var data = StoredProcedure.procedureName(json.Parameter, json.Parameter, json.Parameter, json.Parameter);
     return data;
 }

модель:

 public class modelname {
     public long parameter{ get; set; }
     public int parameter{ get; set; }
     public int parameter{ get; set; }
     public string parameter{ get; set; }
 }