我有这个json文件:
[
{
"blah" : "some text here",
"hidden" : false,
},
{
"blah" : "some other text",
"hidden" : false,
}
]
我将它加载到JArray中然后我想使用ToObject方法将数据反序列化为自定义类:
public class LookupItem
{
public string DisplayMember { get; set; }
}
显示成员我想让它成为对象上出现的第一个属性的值。那样:
var a = myJArray.ToObject(List<LookupItem>);
将返回
a[0].DisplayMember ---> some text here
a[1].DisplayMember ---> some other text
我以为我可以使用
[JsonProperty(Order = 0)]
属性但它似乎不适用于序列化的反序列化。 (真正的问题是我不知道第一个属性的关键价值。)
答案 0 :(得分:0)
Inconsitent JSON
如果您的JSON中没有一致性,您可以将整个内容反序列化为对象。
var items = JsonConvert.DeserializeObject("Your JSON"));
然后将其转换为JContainer
并循环遍历它并创建LookupItem
个对象。下面的代码假定第一个属性是您想要的:
var luItems = new List<LookupItem>();
var item = ((Newtonsoft.Json.Linq.JContainer)items).ToList()[0];
((Newtonsoft.Json.Linq.JContainer)items).ToList().ForEach(x =>
luItems.Add(new LookupItem { DisplayMember = x.First.First().ToString() }));
<强> Consitent 强>
如果有联系,那么创建一个C#类来表示JSON的对象:
public class Class1
{
public string blah { get; set; }
public bool hidden { get; set; }
}
然后反序列化并创建LookupItem
个实例:
var consitentItems = JsonConvert.DeserializeObject<Class1[]>(File.ReadAllText("Files/Json.txt"));
var consistentLookupItems = new List<LookupItem>();
consitentItems.ToList().ForEach(x =>
consistentLookupItems.Add(new LookupItem { DisplayMember = x.blah }));
答案 1 :(得分:0)
使用Newtonsoft.Json.Linq.JArray
采取所有JTokens
Newtonsoft.Json.Linq.JArray jarr = (Newtonsoft.Json.Linq.JArray)(JsonConvert.DeserializeObject(yourJsonScript));
List<LookupItem> myList= New List<LookupItem>();
jarr.ToList().ForEach(jtoken =>
{
myList.Add(new LookupItem(){DisplayMember=jtoken.ElementAt(0).ToObject<string>()});
});