【问题标题】:Convert object property to specific class instance from a string key将对象属性从字符串键转换为特定的类实例
【发布时间】:2017-05-09 20:10:48
【问题描述】:

我目前正在从通用 csv 阅读器创建我的类的实例(请参阅source here)。它检查一个类具有哪些属性以及它们的顺序,然后从给定的 csv 文件中按该顺序分配它们。

我的问题是我有一个需要能够获取对象属性的类,因为它需要能够是不同类型的类(该类的一个实例可能包含一个 Foo 类实例作为属性值,而另一个具有 Bar 类实例作为该属性值)。读者虽然不知道来自对象的字符串,但我不能将分隔字符放在 csv 中的对象位置内。但是,所有类都有一个 Name 属性(字符串)。

我能否以某种方式使用它作为键来搜索所有对象实例的键匹配?

应该包含另一个类的类的示例:

public class ClassHolder : CsvableBase
{
    public ClassHolder() { }
    public ClassHolder(string name, object obj)
    {
        Name = name;
        Obj = obj;
    }

    public string Name { get; set; }
    public object Obj { get; set; }
}

public class Foo : CsvableBase
{
    public Foo() { }
    public Foo(string name, int amount)
    {
        Name = name;
        Amount = amount;
    }

    public string Name { get; set; }
    public int Amount { get; set; }
}

在 Csv 文件中,它的属性会这样写:

名称;对象

ClassHolderName;FooName FooAmount

所以ClassHolder的名字是正确的,但是Obj属性是字符串“FooName FooAmount”

如果这不可能,我会喜欢其他方法的建议,因为我是编程新手,而且我知道的解决问题的方法越多越好。

【问题讨论】:

  • “我能否以某种方式使用它作为关键字来搜索所有对象实例以查找关键字匹配?” -- 你的意思是,.NET 是否维护所有对象的主列表每个类的实例?不,您必须自己滚动(可能在CsvableBase 中——但请注意,您不要通过永久保留对所有内容的引用来破坏垃圾收集)。 CSV 是这里的绝对要求吗?因为你想要的是 JSON 或 XML。
  • 好吧,我只是介绍了 CSV 作为一种存储信息的方式,但我将对 JSON 和 XML 进行一些研究。因为这似乎对我从中得到的东西来说可能太多了。该项目主要是为了让我学习更多,因为课程已经停止了。
  • 是的,将 CSV 混入分层对象存储格式似乎对您的时间不利。学习 JSON 会让您获得无限的收益。这是一种使用非常广泛且很酷的格式。
  • 好吧,我会考虑那个答案。非常感谢您的时间和帮助。

标签: c# object instance c#-6.0


【解决方案1】:

我强烈建议您使用 XML 或 JSON 而不是 CSV。您正在做的是序列化分层的东西,这就是这些格式的设计目的。 CSV 设计用于序列化平面、表格信息。

可以将 CSV 之类的东西拼凑成合适的东西,但它不再是真正的 CSV 了——除非它作为一个无用的有趣项目特别吸引你(我已经做了一个其中一些),我会和其他人一起去。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    相关资源
    最近更新 更多