【发布时间】:2019-11-07 19:22:29
【问题描述】:
我有如下的类对象
public class Version
{
[JsonIgnore]
public string ClassName = "Version";
[JsonIgnore]
public string Name { get; set; } = "Version 1";
.......
.......
}
我将这个类对象传递给如下方法
class EpJSON
{
public Dictionary<string, Dictionary<string, object>> model = new Dictionary<string, Dictionary<string, object>>();
public void Add(dynamic v)
{
if (model.ContainsKey(v.ClassName))
{
if (model[v.ClassName].ContainsKey(v.Name))
{
model[v.ClassName][v.Name] = v;
}
else
{
model[v.ClassName].Add(v.Name, v);
}
}
else
{
Dictionary<string, object> obj = new Dictionary<string, object>() { { v.Name, v } };
model.Add(v.ClassName, obj);
}
}
public void Save(string path)
{
using (StreamWriter file = File.CreateText(path))
{
JsonSerializer serializer = new JsonSerializer();
serializer.Serialize(file, model);
}
}
}
我正在调用 Add 方法,如下所示
var model = new EpJSON();
var ver1 = new Version() { VersionIdentifier = "9.2" };
model.Add(ver1);
var ver2 = new Version() { Name = "V2", VersionIdentifier = "9.3" };
model.Add(ver2);
model.Save(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "test.json"));
我想从你们那里得到建议,是否有任何通用方法可以将 Version 对象传递给方法 Add,并且我可以传递与此对象完全相同的其他对象,并带有额外的字段
如果您需要更多信息,请告诉我
更新代码
public void Add([dynamicObj] v)
{
if (model.ContainsKey([dynamicObj].ClassName))
{
if (model[[dynamicObj].ClassName].ContainsKey([dynamicObj].Name))
{
model[[dynamicObj].ClassName][[dynamicObj].Name] = v;
}
......
}
......
}
【问题讨论】:
-
传递版本对象的通用方式是什么意思?你已经从我能看到的地方传递了它
-
@Steve 我正在寻找是否有任何方法可以动态传递或通用方法来传递版本对象.. 我可能还需要传递一些其他类,而不仅仅是将来的版本
-
您需要提供一些示例来说明您想要实现的目标。这些类是否共享相同的基类或接口?如果不是,那么您可以通过使用通用方式而不是仅仅接受
Add(object o)来实现什么?如果他们共享一个基类或接口,为什么不直接使用它作为参数呢? -
@Steve 他们不会共享同一个基类,我更新了问题并添加了一些我正在寻找的代码示例......非常感谢您的支持
-
什么是dynamicObj.Name?它是动态对象上的一些属性吗?如果是这样,那么您正在寻找第二个参数而不是通用方法。泛型只能传递
type,它只包含来自程序集级别的信息,而不是来自运行时的信息。