簡體   English   中英

如何在C#中將json字符串轉換為匿名類型?

[英]How to convert json strings into anonymous types in c#?

我正在使用一個庫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/zh-cn/dotnet/csharp/programming-guide/classes-and-structs/anonymous-types

謝謝

考慮使用ServiceStack的動態API反序列化任意JSON。

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

好吧,如果您提供了在數組上失敗的實際代碼示例,則將有所幫助,但是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);反序列化它var json = JsonConvert.DeserializeObject<MyDto>(s);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM