我有一个类似于此的JSON字符串:
public static void flatten( File _src, File _dest ) throws DocumentException, IOException {
PdfReader reader = null;
PdfStamper stamper = null;
FileOutputStream fos = null;
try{
fos = new FileOutputStream( _dest );
reader = new PdfReader( _src.getAbsolutePath() );
stamper = new PdfStamper( reader, fos );
stamper.setFormFlattening( true );
stamper.close();
}finally{
if ( reader != null ) reader.close();
if ( fos != null ) try{ fos.close(); }catch( IOException ignored ){}
}
}
所以,在我的场景中,我知道数组中的Zombie对象将始终是相同的。但除此之外,我什么都不知道。也就是说,在{
"automatic" : "true",
"brainstorm" : "1000",
"zombies" : [{ "Name" : "Fred", "Grrh" : "50" }, { "Name" : "Sally", "Grrh" : "67" }, { "Name" : "Chris", "Grrh" : "23" }],
"nightSkyRadius" : "30"
... could be anything here or at the same level as zombies ...
}
值的同一根处可以有任意数量的值。
所以我的问题是,如何使用Json.NET反序列化我的zombies
?我不知道其他值是什么(如果值是正确的术语)所以我不能只创建一个描述传入的Json字符串的对象。所以我想我可以从json字符串中选择zombies
然后反序列化它。
但是,我想,我必须编写一个字符串解析器,将zombies
拉出来...这似乎是一个额外的不必要的步骤。我不能zombies
为我做这件事吗?
另外,我尝试了Json.NET
,但只能处理响应字符串中指定了一个僵尸的情况。
谢谢,我希望JsonConvert.DeserializeObject<dynamic>(responseString);
让这个问题看起来更酷lol
答案 0 :(得分:1)
创建一个Zombie类并将json解析为。 Newtonsoft非常聪明,可以为您解码
public class zombies
{
public string Name;
public int Grrh;
}
现在你可以做到
var zombies = JsonConvert.DeserializeObject<List<zombies>>(responseString);
答案 1 :(得分:1)
如果你只需要一个僵尸阵列,你可以只用一个僵尸的自动属性数组来简单地反序列化对象
public class Zombie {
public string Name {get;set;}
public string Grrh {get;set;}
}
public class Zombies {
public IEnumerable<Zombie> ZombieCollection {get;set;}
}
然后
JsonConvert.DeserializeObject<Zombies>(responseString)
答案 2 :(得分:1)
你可以将整个Json对象传递给一个只有一个Zombies列表作为其集合的对象。指定JsonPropertyAttribute
它将仅对僵尸属性进行反序列化,并忽略它无法映射到对象上的所有内容。
假设僵尸类:
public class Zombie
{
public string Name { get; set; }
public string Grrh {get; set; }
}
和一个用于保存整个json对象的类(它只是僵尸集合)
public class MyZombieJsonData
{
[JsonProperty(PropertyName = "zombies")]
public List<Zombie> ZombieList { get; set; }
}
然后,只要您有权访问json字符串,就可以执行以下操作:
JsonConvert.DeserializeObject<MyZombieJsonData>(theJsonDataAsAString);
其中theJsonDataAsAString
是您的整个Json数据,包括您不知道并且不想反序列化的内容,作为字符串类型。