我正在编写游戏工具。该游戏有物品清单。我可以找到列出这些项目及其统计信息的唯一来源是.ts打字稿文件:https://github.com/hondasmx/ngu_armory/blob/master/src/app/servises/items.ts
我只需要C#中的此列表。我以前从未听说过TypeScript(看起来很棒),只需要这些数据即可继续。 Google并没有太大帮助,我找到了一些工具,即quicktype来尝试直接转换。我能够使用QuickType来获取以下C#代码:
// <auto-generated />
//
// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do one of these:
//
// using QuickType;
//
// var item = Item.FromJson(jsonString);
// var itemStat = ItemStat.FromJson(jsonString);
// var slot = Slot.FromJson(jsonString);
// var stat = Stat.FromJson(jsonString);
// var setName = SetName.FromJson(jsonString);
namespace QuickType
{
using System;
using System.Collections.Generic;
using System.Globalization;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
public partial class Item
{
[JsonProperty("img", NullValueHandling = NullValueHandling.Ignore)]
public string Img { get; set; }
[JsonProperty("isEquippedInAccs", NullValueHandling = NullValueHandling.Ignore)]
public bool? IsEquippedInAccs { get; set; }
[JsonProperty("isEquippedInArmory", NullValueHandling = NullValueHandling.Ignore)]
public bool? IsEquippedInArmory { get; set; }
[JsonProperty("itemLevel", NullValueHandling = NullValueHandling.Ignore)]
public double? ItemLevel { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("setName", NullValueHandling = NullValueHandling.Ignore)]
public SetNameEnum? SetName { get; set; }
[JsonProperty("slot")]
public SlotEnum Slot { get; set; }
[JsonProperty("stats")]
public List<ItemStat> Stats { get; set; }
}
public partial class ItemStat
{
[JsonProperty("stat")]
public StatEnum Stat { get; set; }
[JsonProperty("value")]
public double Value { get; set; }
}
public enum SetNameEnum { BadlyDrawnSet, BeardverseSet, CaveSet, ChocoSet, ClockSet, EdgySet, ForestPendants, ForestSet, GaudySet, GrbSet, GreasyNerdSet, Hearts, HsbSet, JakeSet, Looty, MegaSet, MetaSet, MobsterSet, Other, PartySet, PrettyPinkPrincessSet, SReredneWSet, SewersSet, SlimySet, SpoopySet, StealthSet, The2DSet, TrainingSet, UugRings, WandererSSet };
public enum SlotEnum { Accessory, Armor, Boots, Head, Pants, Weapon };
public enum StatEnum { AdvanceTraining, Ap, AugmentSpeed, BeardSpeed, DaycareSpeed, DropChance, EnergyBars, EnergyCap, EnergyPower, EnergySpeed, Experience, GoldDrops, MagicBars, MagicCap, MagicPower, MagicSpeed, MoveCooldown, NguSpeed, Power, QuestDrops, Respawn, SeedGain, Toughness, WandoosSpeed, YggdrasilYeild };
public partial class Item
{
public static Item FromJson(string json) => JsonConvert.DeserializeObject<Item>(json, QuickType.Converter.Settings);
}
public partial class ItemStat
{
public static ItemStat FromJson(string json) => JsonConvert.DeserializeObject<ItemStat>(json, QuickType.Converter.Settings);
}
public class Slot
{
public static SlotEnum FromJson(string json) => JsonConvert.DeserializeObject<SlotEnum>(json, QuickType.Converter.Settings);
}
public class Stat
{
public static StatEnum FromJson(string json) => JsonConvert.DeserializeObject<StatEnum>(json, QuickType.Converter.Settings);
}
public class SetName
{
public static SetNameEnum FromJson(string json) => JsonConvert.DeserializeObject<SetNameEnum>(json, QuickType.Converter.Settings);
}
public static class Serialize
{
public static string ToJson(this Item self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
public static string ToJson(this ItemStat self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
public static string ToJson(this SlotEnum self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
public static string ToJson(this StatEnum self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
public static string ToJson(this SetNameEnum self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
}
internal static class Converter
{
public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
{
MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
DateParseHandling = DateParseHandling.None,
Converters =
{
SetNameEnumConverter.Singleton,
SlotEnumConverter.Singleton,
StatEnumConverter.Singleton,
new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
},
};
}
internal class SetNameEnumConverter : JsonConverter
{
public override bool CanConvert(Type t) => t == typeof(SetNameEnum) || t == typeof(SetNameEnum?);
public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.Null) return null;
var value = serializer.Deserialize<string>(reader);
switch (value)
{
case "2D Set":
return SetNameEnum.The2DSet;
case "Badly Drawn Set":
return SetNameEnum.BadlyDrawnSet;
case "Beardverse Set":
return SetNameEnum.BeardverseSet;
case "Cave Set":
return SetNameEnum.CaveSet;
case "Choco Set":
return SetNameEnum.ChocoSet;
case "Clock Set":
return SetNameEnum.ClockSet;
case "Edgy Set":
return SetNameEnum.EdgySet;
case "Forest Pendants":
return SetNameEnum.ForestPendants;
case "Forest Set":
return SetNameEnum.ForestSet;
case "GRB Set":
return SetNameEnum.GrbSet;
case "Gaudy Set":
return SetNameEnum.GaudySet;
case "Greasy Nerd Set":
return SetNameEnum.GreasyNerdSet;
case "HSB Set":
return SetNameEnum.HsbSet;
case "Hearts":
return SetNameEnum.Hearts;
case "Jake Set":
return SetNameEnum.JakeSet;
case "Looty":
return SetNameEnum.Looty;
case "Mega Set":
return SetNameEnum.MegaSet;
case "Meta Set":
return SetNameEnum.MetaSet;
case "Mobster Set":
return SetNameEnum.MobsterSet;
case "Other":
return SetNameEnum.Other;
case "Party Set":
return SetNameEnum.PartySet;
case "Pretty Pink Princess Set":
return SetNameEnum.PrettyPinkPrincessSet;
case "Sewers Set":
return SetNameEnum.SewersSet;
case "Slimy Set":
return SetNameEnum.SlimySet;
case "Spoopy Set":
return SetNameEnum.SpoopySet;
case "Stealth Set":
return SetNameEnum.StealthSet;
case "Training Set":
return SetNameEnum.TrainingSet;
case "UUG Rings":
return SetNameEnum.UugRings;
case "Wanderer's Set":
return SetNameEnum.WandererSSet;
case "s'reredneW Set":
return SetNameEnum.SReredneWSet;
}
throw new Exception("Cannot unmarshal type SetNameEnum");
}
public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
{
if (untypedValue == null)
{
serializer.Serialize(writer, null);
return;
}
var value = (SetNameEnum)untypedValue;
switch (value)
{
case SetNameEnum.The2DSet:
serializer.Serialize(writer, "2D Set");
return;
case SetNameEnum.BadlyDrawnSet:
serializer.Serialize(writer, "Badly Drawn Set");
return;
case SetNameEnum.BeardverseSet:
serializer.Serialize(writer, "Beardverse Set");
return;
case SetNameEnum.CaveSet:
serializer.Serialize(writer, "Cave Set");
return;
case SetNameEnum.ChocoSet:
serializer.Serialize(writer, "Choco Set");
return;
case SetNameEnum.ClockSet:
serializer.Serialize(writer, "Clock Set");
return;
case SetNameEnum.EdgySet:
serializer.Serialize(writer, "Edgy Set");
return;
case SetNameEnum.ForestPendants:
serializer.Serialize(writer, "Forest Pendants");
return;
case SetNameEnum.ForestSet:
serializer.Serialize(writer, "Forest Set");
return;
case SetNameEnum.GrbSet:
serializer.Serialize(writer, "GRB Set");
return;
case SetNameEnum.GaudySet:
serializer.Serialize(writer, "Gaudy Set");
return;
case SetNameEnum.GreasyNerdSet:
serializer.Serialize(writer, "Greasy Nerd Set");
return;
case SetNameEnum.HsbSet:
serializer.Serialize(writer, "HSB Set");
return;
case SetNameEnum.Hearts:
serializer.Serialize(writer, "Hearts");
return;
case SetNameEnum.JakeSet:
serializer.Serialize(writer, "Jake Set");
return;
case SetNameEnum.Looty:
serializer.Serialize(writer, "Looty");
return;
case SetNameEnum.MegaSet:
serializer.Serialize(writer, "Mega Set");
return;
case SetNameEnum.MetaSet:
serializer.Serialize(writer, "Meta Set");
return;
case SetNameEnum.MobsterSet:
serializer.Serialize(writer, "Mobster Set");
return;
case SetNameEnum.Other:
serializer.Serialize(writer, "Other");
return;
case SetNameEnum.PartySet:
serializer.Serialize(writer, "Party Set");
return;
case SetNameEnum.PrettyPinkPrincessSet:
serializer.Serialize(writer, "Pretty Pink Princess Set");
return;
case SetNameEnum.SewersSet:
serializer.Serialize(writer, "Sewers Set");
return;
case SetNameEnum.SlimySet:
serializer.Serialize(writer, "Slimy Set");
return;
case SetNameEnum.SpoopySet:
serializer.Serialize(writer, "Spoopy Set");
return;
case SetNameEnum.StealthSet:
serializer.Serialize(writer, "Stealth Set");
return;
case SetNameEnum.TrainingSet:
serializer.Serialize(writer, "Training Set");
return;
case SetNameEnum.UugRings:
serializer.Serialize(writer, "UUG Rings");
return;
case SetNameEnum.WandererSSet:
serializer.Serialize(writer, "Wanderer's Set");
return;
case SetNameEnum.SReredneWSet:
serializer.Serialize(writer, "s'reredneW Set");
return;
}
throw new Exception("Cannot marshal type SetNameEnum");
}
public static readonly SetNameEnumConverter Singleton = new SetNameEnumConverter();
}
internal class SlotEnumConverter : JsonConverter
{
public override bool CanConvert(Type t) => t == typeof(SlotEnum) || t == typeof(SlotEnum?);
public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.Null) return null;
var value = serializer.Deserialize<string>(reader);
switch (value)
{
case "Accessory":
return SlotEnum.Accessory;
case "Armor":
return SlotEnum.Armor;
case "Boots":
return SlotEnum.Boots;
case "Head":
return SlotEnum.Head;
case "Pants":
return SlotEnum.Pants;
case "Weapon":
return SlotEnum.Weapon;
}
throw new Exception("Cannot unmarshal type SlotEnum");
}
public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
{
if (untypedValue == null)
{
serializer.Serialize(writer, null);
return;
}
var value = (SlotEnum)untypedValue;
switch (value)
{
case SlotEnum.Accessory:
serializer.Serialize(writer, "Accessory");
return;
case SlotEnum.Armor:
serializer.Serialize(writer, "Armor");
return;
case SlotEnum.Boots:
serializer.Serialize(writer, "Boots");
return;
case SlotEnum.Head:
serializer.Serialize(writer, "Head");
return;
case SlotEnum.Pants:
serializer.Serialize(writer, "Pants");
return;
case SlotEnum.Weapon:
serializer.Serialize(writer, "Weapon");
return;
}
throw new Exception("Cannot marshal type SlotEnum");
}
public static readonly SlotEnumConverter Singleton = new SlotEnumConverter();
}
internal class StatEnumConverter : JsonConverter
{
public override bool CanConvert(Type t) => t == typeof(StatEnum) || t == typeof(StatEnum?);
public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.Null) return null;
var value = serializer.Deserialize<string>(reader);
switch (value)
{
case "AP":
return StatEnum.Ap;
case "Advance Training":
return StatEnum.AdvanceTraining;
case "Augment Speed":
return StatEnum.AugmentSpeed;
case "Beard Speed":
return StatEnum.BeardSpeed;
case "Daycare Speed":
return StatEnum.DaycareSpeed;
case "Drop Chance":
return StatEnum.DropChance;
case "Energy Bars":
return StatEnum.EnergyBars;
case "Energy Cap":
return StatEnum.EnergyCap;
case "Energy Power":
return StatEnum.EnergyPower;
case "Energy Speed":
return StatEnum.EnergySpeed;
case "Experience":
return StatEnum.Experience;
case "Gold Drops":
return StatEnum.GoldDrops;
case "Magic Bars":
return StatEnum.MagicBars;
case "Magic Cap":
return StatEnum.MagicCap;
case "Magic Power":
return StatEnum.MagicPower;
case "Magic Speed":
return StatEnum.MagicSpeed;
case "Move Cooldown":
return StatEnum.MoveCooldown;
case "NGU Speed":
return StatEnum.NguSpeed;
case "Power":
return StatEnum.Power;
case "Quest Drops":
return StatEnum.QuestDrops;
case "Respawn":
return StatEnum.Respawn;
case "Seed Gain":
return StatEnum.SeedGain;
case "Toughness":
return StatEnum.Toughness;
case "Wandoos Speed":
return StatEnum.WandoosSpeed;
case "Yggdrasil Yeild":
return StatEnum.YggdrasilYeild;
}
throw new Exception("Cannot unmarshal type StatEnum");
}
public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
{
if (untypedValue == null)
{
serializer.Serialize(writer, null);
return;
}
var value = (StatEnum)untypedValue;
switch (value)
{
case StatEnum.Ap:
serializer.Serialize(writer, "AP");
return;
case StatEnum.AdvanceTraining:
serializer.Serialize(writer, "Advance Training");
return;
case StatEnum.AugmentSpeed:
serializer.Serialize(writer, "Augment Speed");
return;
case StatEnum.BeardSpeed:
serializer.Serialize(writer, "Beard Speed");
return;
case StatEnum.DaycareSpeed:
serializer.Serialize(writer, "Daycare Speed");
return;
case StatEnum.DropChance:
serializer.Serialize(writer, "Drop Chance");
return;
case StatEnum.EnergyBars:
serializer.Serialize(writer, "Energy Bars");
return;
case StatEnum.EnergyCap:
serializer.Serialize(writer, "Energy Cap");
return;
case StatEnum.EnergyPower:
serializer.Serialize(writer, "Energy Power");
return;
case StatEnum.EnergySpeed:
serializer.Serialize(writer, "Energy Speed");
return;
case StatEnum.Experience:
serializer.Serialize(writer, "Experience");
return;
case StatEnum.GoldDrops:
serializer.Serialize(writer, "Gold Drops");
return;
case StatEnum.MagicBars:
serializer.Serialize(writer, "Magic Bars");
return;
case StatEnum.MagicCap:
serializer.Serialize(writer, "Magic Cap");
return;
case StatEnum.MagicPower:
serializer.Serialize(writer, "Magic Power");
return;
case StatEnum.MagicSpeed:
serializer.Serialize(writer, "Magic Speed");
return;
case StatEnum.MoveCooldown:
serializer.Serialize(writer, "Move Cooldown");
return;
case StatEnum.NguSpeed:
serializer.Serialize(writer, "NGU Speed");
return;
case StatEnum.Power:
serializer.Serialize(writer, "Power");
return;
case StatEnum.QuestDrops:
serializer.Serialize(writer, "Quest Drops");
return;
case StatEnum.Respawn:
serializer.Serialize(writer, "Respawn");
return;
case StatEnum.SeedGain:
serializer.Serialize(writer, "Seed Gain");
return;
case StatEnum.Toughness:
serializer.Serialize(writer, "Toughness");
return;
case StatEnum.WandoosSpeed:
serializer.Serialize(writer, "Wandoos Speed");
return;
case StatEnum.YggdrasilYeild:
serializer.Serialize(writer, "Yggdrasil Yeild");
return;
}
throw new Exception("Cannot marshal type StatEnum");
}
public static readonly StatEnumConverter Singleton = new StatEnumConverter();
}
}
这将是非常有用的,但是我看不到任何获取该列表的方法。我尝试使用FromJSON函数,但它不了解TypeScript。因此,即使是将TS列表转换为JSON的方法,也可能会使我排序。
这时,手动输入所有数据会更快。帮助吗?
答案 0 :(得分:0)
由于该列表还包含枚举,因此在其上进行查找和替换以创建有效的JSON可能会变得乏味。
相反,您可以安装一个打字稿编译器,使用它将列表转换为有效的JSON并保存。
第一个要求是NodeJS。
安装完成后,通过在终端机中输入npm install -g typescript
install Typescript。
(可选)您也可以安装ts-node npm install -g ts-node
直接运行打字稿代码。
现在复制您链接的代码,将其粘贴到新文档中,并在其末尾添加console.log(JSON.stringify(items));
。将文件另存为itemList.ts
,然后在该位置打开一个终端(已通过cmd和PowerShell测试),然后输入
tsc .\itemList.ts
node .\itemList.js > out.json
或者,如果您安装了ts-node
ts-node .\itemList.ts > out.json
ts-node只是让您跳过将TypeScript编译为JavaScript。
您应该在同一目录中获得一个名为out.json
的文件,其中包含有效的JSON数据,生成的类中的FromJSON
方法应该可以读取该数据。