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.
Ответы
Ответ 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; }
}