我需要能够访问每个送货服务的代码和标题属性,但是每次包含它们的对象的名称都不同,我无法控制它。
答案 0 :(得分:2)
您可以使用Newtonsoft.Json
nuget包直接将JSON对象解析为模型。
var objData = JsonConvert.DeserializeObject<MyData>(jsonString);
的json数据中获取模型类
您也可以使用动态对象进行转换
var objData = JsonConvert.DeserializeObject<dynamic>(jsonString);
或者没有指定模型calss
var objData = JsonConvert.DeserializeObject(jsonString);
答案 1 :(得分:1)
您可以使用Json.net
将您的json反序列化为dynamic
变量以修复(未知属性)问题,并假设您知道它们,并按名称访问您的属性。
示例:
dynamic parsedObject = JsonConvert.DeserializeObject("{\"id\":\"123\"}");
parsedObject.id // it should read 123
答案 2 :(得分:1)
以下代码与json.net一起使用。
///Custom converter to parse the container.
public class ItemConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var jobj = JObject.Load(reader);
var item = jobj.First.First.ToObject<Item>();
var container = new ItemContainer
{
Name = jobj.First.Path,
Data = item
};
return container;
}
public override bool CanConvert(Type objectType)
{
return objectType == typeof (Item);
}
}
[JsonConverter(typeof(ItemConverter))]
public class ItemContainer
{
public string Name { get; set; }
//Your object is here
public Item Data { get; set; }
}
public class Item
{
public string code { get; set; }
//Other properties
}
public class RootObj
{
public ItemContainer[] ShippingMethods { get; set; }
}
反序列化json:
JsonConvert.DeserializeObject<RootObj>("Your json string");