如何列出所有 minecraft 配置文件
How to list all minecraft profiles
如何通过 launcher_profiles.json 文件列出所有 minecraft 配置文件?
我尝试使用网站 json2csharp.com,但不幸的是,当它生成 class 就绪代码时,他返回了所有配置文件,就好像它也是一个 class。
例如:
我使用了这个简单的代码 minecraft 配置文件 ...
{
"profiles": {
"1.7.10": {
"name": "1.7.10",
"lastVersionId": "1.7.10"
}
},
"selectedProfile": "1.7.10"
}
但是当我发送网站转换 C# 它时 returns 这个:
public class __invalid_type__1710
{
public string name { get; set; }
public string lastVersionId { get; set; }
}
public class Profiles
{
public __invalid_type__1710 __invalid_name__1.7.10 { get; set; }
}
public class RootObject
{
public Profiles profiles { get; set; }
public string selectedProfile { get; set; }
}
自己看看:Json2CSharp
Have you any way I can read the launcher_profiles.json file minecraft using Newtonsoft.Json.Linq?
所以问题可能是 launcher_profiles.json 不是真正的犹太洁食 JSON。
将其放入 Json2CSharp 中以了解我的意思:
{
"profiles": [
{
"name": "1.7.10",
"lastVersionId": "1.7.10"
}
],
"selectedProfile": "1.7.10"
}
此处的不同之处在于我重新定义了配置文件节点以正确表示映射到 C# 中的通用列表的集合(数组)。
您可能需要将该文件手动解析为 JSON.Net,否则其他选项将无法使用无效的 json 格式。
我通常不使用 Linq versions of the Json.Net library,但我想出了一个简单的例子来说明如何获取配置文件的所有名称(您不能序列化为 class 给定格式)。
class Program
{
//Add another "profile" to show this works with more than one
private static String json = "{ \"profiles\": { \"1.7.10\": { \"name\": \"1.7.10\", \"lastVersionId\": \"1.7.10\" }, \"1.7.11\": { \"name\": \"1.7.11\", \"lastVersionId\": \"1.7.11\" } }, \"selectedProfile\": \"1.7.10\" }";
static void Main(string[] args)
{
//Parse to JObject
var obj = Newtonsoft.Json.Linq.JObject.Parse(json);
foreach (var profile in obj["profiles"])
{
foreach (var child in profile.Children())
{
Console.WriteLine(child["name"]);
}
}
}
}
虽然在很多情况下很有用,但 json2csharp.com 并非万无一失。如您所见,它不处理键名是动态的或无法转换为有效的 C# 标识符的情况。在这些情况下,您将需要对生成的 classes 进行手动调整。例如,您可以使用 Dictionary<string, Profile>
代替静态 class 来处理 profiles
对象的动态键。
像这样定义您的 classes:
public class RootObject
{
public Dictionary<string, Profile> profiles { get; set; }
public string selectedProfile { get; set; }
}
public class Profile
{
public string name { get; set; }
public string lastVersionId { get; set; }
}
然后,您可以使用 JavaScriptSerializer
or Json.Net 反序列化为 RootObject
class。
这是一个使用 Json.Net 的 fiddle:https://dotnetfiddle.net/ZlEK63
如何通过 launcher_profiles.json 文件列出所有 minecraft 配置文件?
我尝试使用网站 json2csharp.com,但不幸的是,当它生成 class 就绪代码时,他返回了所有配置文件,就好像它也是一个 class。
例如: 我使用了这个简单的代码 minecraft 配置文件 ...
{
"profiles": {
"1.7.10": {
"name": "1.7.10",
"lastVersionId": "1.7.10"
}
},
"selectedProfile": "1.7.10"
}
但是当我发送网站转换 C# 它时 returns 这个:
public class __invalid_type__1710
{
public string name { get; set; }
public string lastVersionId { get; set; }
}
public class Profiles
{
public __invalid_type__1710 __invalid_name__1.7.10 { get; set; }
}
public class RootObject
{
public Profiles profiles { get; set; }
public string selectedProfile { get; set; }
}
自己看看:Json2CSharp
Have you any way I can read the launcher_profiles.json file minecraft using Newtonsoft.Json.Linq?
所以问题可能是 launcher_profiles.json 不是真正的犹太洁食 JSON。
将其放入 Json2CSharp 中以了解我的意思:
{
"profiles": [
{
"name": "1.7.10",
"lastVersionId": "1.7.10"
}
],
"selectedProfile": "1.7.10"
}
此处的不同之处在于我重新定义了配置文件节点以正确表示映射到 C# 中的通用列表的集合(数组)。
您可能需要将该文件手动解析为 JSON.Net,否则其他选项将无法使用无效的 json 格式。
我通常不使用 Linq versions of the Json.Net library,但我想出了一个简单的例子来说明如何获取配置文件的所有名称(您不能序列化为 class 给定格式)。
class Program
{
//Add another "profile" to show this works with more than one
private static String json = "{ \"profiles\": { \"1.7.10\": { \"name\": \"1.7.10\", \"lastVersionId\": \"1.7.10\" }, \"1.7.11\": { \"name\": \"1.7.11\", \"lastVersionId\": \"1.7.11\" } }, \"selectedProfile\": \"1.7.10\" }";
static void Main(string[] args)
{
//Parse to JObject
var obj = Newtonsoft.Json.Linq.JObject.Parse(json);
foreach (var profile in obj["profiles"])
{
foreach (var child in profile.Children())
{
Console.WriteLine(child["name"]);
}
}
}
}
虽然在很多情况下很有用,但 json2csharp.com 并非万无一失。如您所见,它不处理键名是动态的或无法转换为有效的 C# 标识符的情况。在这些情况下,您将需要对生成的 classes 进行手动调整。例如,您可以使用 Dictionary<string, Profile>
代替静态 class 来处理 profiles
对象的动态键。
像这样定义您的 classes:
public class RootObject
{
public Dictionary<string, Profile> profiles { get; set; }
public string selectedProfile { get; set; }
}
public class Profile
{
public string name { get; set; }
public string lastVersionId { get; set; }
}
然后,您可以使用 JavaScriptSerializer
or Json.Net 反序列化为 RootObject
class。
这是一个使用 Json.Net 的 fiddle:https://dotnetfiddle.net/ZlEK63