gpt4 book ai didi

c# - 使用 Json.NET 从 JSON 文件获取数据并使用 T4 文本模板创建 c-sharp 文件

转载 作者:行者123 更新时间:2023-12-05 09:15:15 25 4
gpt4 key购买 nike

我想以编程方式创建 Subject.cs 文件。为此,当我搜索互联网时,我看到我可以使用 T4 文本模板。现在,我想使用 Json.NET 从 JSON 文件中获取数据并将 Root 值设置为属性,如下所示:

namespace Library
{
class Subject
{
public static int forensic_medicine { get; set; }
public static int family_law { get; set; }
public static int constitutional_law { get; set; }
public static int obligations_law { get; set; }
}
}

JSON 文件内容如下:

{
"Subjects": [
{
"Root": "forensic_medicine",
"Name": "Forensic Medicine",
"StrID": "FMD",
"RowID": 746
},
{
"Root": "family_law",
"Name": "Family Law",
"StrID": "FML",
"RowID": 1239
},
{
"Root": "constitutional_law",
"Name": "Constitutional Law",
"StrID": "CNL",
"RowID": 996
},
{
"Root": "obligations_law",
"Name": "Obligations Law",
"StrID": "OBL",
"RowID": 1672
}
],
"is_restart": 0,
"book_path": "D:\\Colin\\_books\\",
"thesis_path": "D:\\Colin\\_thesises\\",
"full_screen": false
}

我想,我必须使用 SubjectListSubject 类来从 JSON 文件中读取和获取数据。为此,我使用这样的类:

public class SubjectList
{
public List<Subject> Subjects { get; set; }
}

public class Subject
{
public string StrID { get; set; }
public string Name { get; set; }
public string Root { get; set; }
public int RowID { get; set; }
}

最后,为了获取数据,我使用如下代码:

var json = JsonConvert.DeserializeObject<SubjectList>(File.ReadAllText("D:\\Colin\\_test\\inf.json"));

在文本模板文件(Subjects.tt)中,代码在这里:

<#@ template debug="true" hostspecific="true" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ assembly name="$(SolutionDir)Test\bin\Debug\Newtonsoft.Json.dll" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ output extension=".cs" #>
namespace Library
{
public class Subject
{
<#
var json = JsonConvert.DeserializeObject<SubjectList>(File.ReadAllText("D:\\Colin\\_test\\inf.json"));
#>
}
}

我在没有做任何其他事情的情况下收到以下错误。

编译转换:当前上下文中不存在名称“JsonConvert”

编译转换:找不到类型或命名空间名称“SubjectList”(是否缺少 using 指令或程序集引用?)

我想我必须在 Subjects.tt 文件中使用 SubjectListSubject 类,但我不知道该怎么做它。更重要的是,如何以编程方式创建 Subject.cs 文件而不会出现任何问题?

最佳答案

要使用程序集中的任何引用(无论是 Newtonsoft.Json 之类的 NuGet 包还是项目输出),您必须添加导入 程序集指令。具体针对您的情况,尝试通过直接使用程序集名称来添加引用的程序集。附带说明一下,读入与文本模板本身相关的 json 文件也很好。示例:

<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.IO" #>
<#@ assembly name="Newtonsoft.Json" #>
<#@ import namespace="Newtonsoft.Json" #>
<#@ import namespace="Newtonsoft.Json.Linq" #>
<#@ output extension=".cs" #>
<#
string templateFileName = Path.GetFileNameWithoutExtension(this.Host.TemplateFile);
string settingsPath = this.Host.ResolvePath($"{templateFileName}.json");
string settingsJson = File.ReadAllText(settingsPath);
var datasource = JObject.Parse(settingsJson);
#>

关于c# - 使用 Json.NET 从 JSON 文件获取数据并使用 T4 文本模板创建 c-sharp 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52950990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com