public static void ExportDoc(string target) { DocItems root = new DocItems() { Remark = "数据表:即textfiles/[$type].txt文件, 可以copy进Excel中, A-Z对应列名", list = (from t in typeof(Heluo.Data.Item).Assembly.GetTypes() where t.IsSubclassOf(typeof(Heluo.Data.Item)) && !t.HasAttribute <Hidden>(false) select Activator.CreateInstance(t) as Heluo.Data.Item).ToList() }; JsonSerializerSettings setting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new Vector3Converter(), new EnumToStringConverter(), new ModOutputNodeConverter(), new ItemDocConverter(), } }; string jsonStr = JsonConvert.SerializeObject(root, Formatting.Indented, setting); Console.WriteLine(jsonStr); GlobalLib.ToFile(jsonStr, target); }
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { Type type = value.GetType(); JObject o = new JObject { { "$type", type.Name } }; var memberInfos = (from f in type.GetFields() where f.HasAttribute <FieldOrderAttribute>() && !f.IsLiteral select(f as MemberInfo, f.GetAttribute <DisplayNameAttribute>()?.Name, f.FieldType, f.GetAttribute <FieldOrderAttribute>().Order)).ToList(); memberInfos.AddRange((from p in type.GetProperties() where p.HasAttribute <FieldOrderAttribute>() select(p as MemberInfo, p.GetAttribute <DisplayNameAttribute>()?.Name, p.PropertyType, p.GetAttribute <FieldOrderAttribute>().Order)).ToList()); memberInfos.Sort((a, b) => { return(a.Order.CompareTo(b.Order)); }); for (int i = 0; i < memberInfos.Count; ++i) { var info = memberInfos[i]; o.Add(((char)('A' + i)).ToString(), GlobalLib.TypeToDoc(info.FieldType, info.Name)); var v = info.Item1.MemberType == MemberTypes.Field ? (info.Item1 as FieldInfo).GetValue(value) : (info.Item1 as PropertyInfo).GetValue(value); o.Add(info.Item1.Name, v == null ? null : JToken.FromObject(v, serializer)); } o.WriteTo(writer); }
public void MyTestInitialize() { GlobalLib.CloseAllBrowsers(); }