首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在c#中将json字符串转换为匿名类型?

如何在c#中将json字符串转换为匿名类型?
EN

Stack Overflow用户
提问于 2019-02-23 01:38:32
回答 2查看 443关注 0票数 0

我正在使用一个库handlebars.net。https://github.com/rexm/Handlebars.Net

它接受一个模板字符串和一个匿名类型,并使用匿名类型值填充模板。下面是一个示例:

代码语言:javascript
复制
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转换为字符串的错误。

所以我的问题是,有没有办法将json文件转换为匿名类型?

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/anonymous-types

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-23 01:48:33

考虑使用ServiceStack的动态API来反序列化任意JSON。

https://github.com/ServiceStack/ServiceStack.Text#supports-dynamic-json

票数 2
EN

Stack Overflow用户

发布于 2019-02-23 03:01:16

如果您提供了一个在数组上失败的实际代码示例,这将有所帮助,但是Newtonsoft JSON解析任何有效的JSON都没有问题,所以我认为一定是您的代码有问题

小提琴:https://dotnetfiddle.net/e0q5mO

代码语言:javascript
复制
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 }表达式之外,您没有其他方法来创建它的实例。因此,如果必须反序列化为严格类型的实例,则必须对其进行描述。如下所示:

代码语言:javascript
复制
public class MyDto
{
    public int [] a;
}

然后,您将能够使用var json = JsonConvert.DeserializeObject<MyDto>(s);对其进行反序列化

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54832409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档