C# 9 记录有 ToString() 的 { propertyName=value } 输出,如何从中返回记录类型?

标签 c# c#-9.0

给定

        public record SimpleRec(string PropertyName);

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

            Console.WriteLine(recordString);
        }

输出:

SimpleRec { PropertyName = property }

是否有同样简单的方法从 recordString 实例化 SimpleRec

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


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

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


我尝试过这个:

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

但是抛出了一个InvalidCastException

最佳答案

这里使用的 ToString 并不意味着以这种解析方式进行编程使用 - 它意味着对调试有用,仅此而已。如果您需要确定性的东西:编写您自己的 ToString,或使用您选择的序列化器。

关于C# 9 记录有 ToString() 的 { propertyName=value } 输出,如何从中返回记录类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69147729/

相关文章:

c# - 枚举中相等运算符和运算符之间的区别

c# - 为什么在将 C# 值元组与 == 进行比较时,编译器会创建隐藏副本?

C# 9 新的 "nested switch expression"与关系模式

c# - 用于 UDP 服务器的 C# 可等待 SocketAsyncEventArgs 包装器; socket.ReceiveAsync 返回无效的 RemoteEndPoint (0.0.0.0 :0)

c# - 为什么 IndexOf 有时不适用于记录列表(或集合)?

c# - 构造函数中 C# 记录上的 JsonProperty

c# - Entity Framework - 同一实体的不同代理对象。并包括具有多条路径到同一目的地的行为

c# - 教程 : Simple WCF XML-RPC client

c# - IQueryable 投影到 DTO - 自动映射器在这种情况下可以提供帮助吗?

c# - 计算整数中的有效数字