我正在使用库handlebars.net。 https://github.com/rexm/Handlebars.Net
使用一个模板字符串和一个匿名类型,并用匿名类型值填充模板。这是一个示例:
string source =
@"<div class=""entry"">
<h1>{{title}}</h1>
<div class=""body"">
{{body}}
</div>
</div>";
var template = Handlebars.Compile(source);
var data = new {
title = "My new post",
body = "This is my first post!"
};
var result = template(data);
/* Would render:
<div class="entry">
<h1>My New Post</h1>
<div class="body">
This is my first post!
</div>
</div>
*/
就我而言,我有一个要读取的json文件,并将其用作匿名类型。如果我使用像newtonsoft这样的json解析器,则会得到一个JSONObject类型的变量,并且它适用于基本值,但是如果我使用数组,则会抛出无法将JArray转换为String的局面。
所以我的问题是,有没有办法将json文件转换为匿名类型?
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/anonymous-types
谢谢
答案 0 :(得分:2)
考虑使用ServiceStack的动态API反序列化任意JSON。
https://github.com/ServiceStack/ServiceStack.Text#supports-dynamic-json
答案 1 :(得分:0)
如果您提供了一个在数组上失败的实际代码示例,那会有所帮助,但是Newtonsoft JSON解析任何有效的JSON都没有问题,所以我相信问题一定出在您的代码上
提琴:https://dotnetfiddle.net/e0q5mO
var s = "{\"a\":[1,2,3]}";
dynamic json = JsonConvert.DeserializeObject(s);
var a = json.a.ToObject<int[]>();
Console.WriteLine(a[0]);
这只是做到这一点的一种方法。
反序列化为匿名类型的问题是它们是匿名的。因此,除了使用new { a, b = c }
表达式之外,您无法创建它的实例。因此,如果必须反序列化为严格类型的实例,则必须对其进行描述。像这样:
public class MyDto
{
public int [] a;
}
然后您就可以使用var json = JsonConvert.DeserializeObject<MyDto>(s);