首页 > 解决方案 > C# 9 记录有来自 ToString() 的 {propertyName=value} 输出,如何从中获取,返回记录类型?

问题描述

给定

        public record SimpleRec(string PropertyName);

        [TestMethod]
        public void Test()
        {
            var simpleRecord = new SimpleRec("property");
            var recordString = simpleRecord.ToString();

            Console.WriteLine(recordString);
        }

输出:

SimpleRec { PropertyName = property }

是否有同样简单的方法来实例化SimpleRecfrom recordString

我希望我们不必弄乱 XML 或 JSON 序列化程序。


令我困惑的是,他们首先选择了上述字符串格式来转换为字符串。如果它有输出 Xml、JSON 甚至 YAML,逆向这个过程将相当简单。

我想我想要一个通用的解决方法。也许是一种转换扩展方法,但我需要弄清楚如何只选择记录类型。或者只是使用 JSON 序列化/反序列化并忽略默认的内置 ToString()。


我试过这个:

var converted = (SimpleRec)Convert.ChangeType(recordString, typeof(SimpleRec));

但是扔了一个InvalidCastException

标签: c#c#-9.0

解决方案


这里ToString使用的 不是为了以这种解析方式进行编程使用——它是为了对调试有用,仅此而已。如果您需要确定性:编写您自己的ToString,或使用您选择的序列化程序。


推荐阅读