【问题标题】:TypeConverter for serialization用于序列化的 TypeConverter
【发布时间】:2010-06-11 22:10:56
【问题描述】:

使用 TypeConverter 进行序列化是正常的做法吗?有一个我不拥有的具有“有损”TypeConverter 的类。转换为字符串时,它用“G4”格式化它的浮点数据,这样当这个类型显示在PropertyGrid中时,它很容易阅读。

我还想使用这个 TypeConverter 从字符串转换,创建这个类的一个实例。现在我正在检查传递给 TypeConverter.ConvertTo 的 CultureInfo,如果 CultureInfo 不是 InvariantCulture,则仅使用漂亮的有损转换。

我想知道我是不是走错了路。

【问题讨论】:

    标签: .net serialization typeconverter


    【解决方案1】:

    如果您要将数据序列化为文件或其他交换格式以在不同文化的用户之间共享,则使用除 InvariantCulture 之外的任何东西都行不通。

    TypeConverter 可用于简单的序列化场景,当所有需要的类型都已知具有适当的 TypeConverter 时。

    【讨论】:

    • 谢谢。当前使用 TypeConverter,将有损格式化输出到 ProperyGrid,也是正常做法吗?
    【解决方案2】:

    嗯,这不是正常的做法。您希望对对象的序列化方式进行某种控制,这样它就不会因仅与 PropertyGrid 相关的细节而困扰您。这通常不难做到:

    class VendorSerialized {
        public VendorSerialized(VendorType obj) {
            // Set properties
            //...
        }
        public VendorType AfterSerialization() {
            var obj = new VendorType();
            // Set the vendor object properties from deserialized data
            //...
            return obj;
        }
        // Properties here...
        //...
    }
    

    问题解决了:)

    【讨论】:

    • 我看不出特定于文化的字符串将如何最终成为反序列化的输入。我错过了什么吗?
    • 呃,你为什么要在文化改变时中断反序列化?本地化是一个 UI 细节,它永远不会影响持久化数据。
    • “您希望对对象的序列化方式进行某种控制,这样它就不会因为只与 PropertyGrid 相关的细节而让您感到困惑。”我可以控制 TypeConverter.ConvertToString,不是吗?我有我需要的 CultureInfo 来决定我是吐出一个美化的字符串还是无损表示。我想我不完全理解你的回答。
    猜你喜欢
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多