C# 克隆仅具有某些获取属性的对象
C# cloning an object that has some get properties only
我的对象有一些获取属性(没有 setter)让我们称它们为 xyz 以便于对话
我正在尝试使用 jsonconvert.deserialise(serialise(object)) 克隆对象
但 xyz 与源的值不同
关于如何将对象复制为与源相同的任何建议
最少的代码
public class MyClass
{
public Guid Id { get; }
public MyClass()
{
Id = Guid.NewGuid();
}
}
主要class:
MyClass myclassobj = new MyClass();
MyClass duplicateobj = JsonSerializer.Deserialize<MyClass>(JsonSerializer.Serialize(myclassobj));
Console.WriteLine("source object " + myclassobj.Id);
Console.WriteLine("target object " + duplicateobj.Id);
输出:
source object 9b1e2bc8-be7a-44f9-ba6a-347cf58cb42e
target object 9f2e08a2-11b8-4aa5-9999-c24765ce2a80 <- this should be same as above
您看到转换器使用无参数构造函数来初始化对象这样的行为。因此 属性 在那里设置为 Guid.NewGuid()
,因此具有不同的值。
因为它是只读的,所以它被保留了。所以转换器基本上不能为它设置不同的值。
因此,在反序列化后,您会看到不同的 ID class。
您可以尝试此处提到的选项:。基于此,您应该使用属性定义构造函数:
[JsonConstructor]
public MyClass(Guid id)
{
Id = id;
}
则输出为:
source object 2e4f73a6-57a5-44d3-bb53-29a574578cbd
target object 2e4f73a6-57a5-44d3-bb53-29a574578cbd
我的对象有一些获取属性(没有 setter)让我们称它们为 xyz 以便于对话 我正在尝试使用 jsonconvert.deserialise(serialise(object)) 克隆对象 但 xyz 与源的值不同
关于如何将对象复制为与源相同的任何建议
最少的代码
public class MyClass
{
public Guid Id { get; }
public MyClass()
{
Id = Guid.NewGuid();
}
}
主要class:
MyClass myclassobj = new MyClass();
MyClass duplicateobj = JsonSerializer.Deserialize<MyClass>(JsonSerializer.Serialize(myclassobj));
Console.WriteLine("source object " + myclassobj.Id);
Console.WriteLine("target object " + duplicateobj.Id);
输出:
source object 9b1e2bc8-be7a-44f9-ba6a-347cf58cb42e
target object 9f2e08a2-11b8-4aa5-9999-c24765ce2a80 <- this should be same as above
您看到转换器使用无参数构造函数来初始化对象这样的行为。因此 属性 在那里设置为 Guid.NewGuid()
,因此具有不同的值。
因为它是只读的,所以它被保留了。所以转换器基本上不能为它设置不同的值。
因此,在反序列化后,您会看到不同的 ID class。
您可以尝试此处提到的选项:
[JsonConstructor]
public MyClass(Guid id)
{
Id = id;
}
则输出为:
source object 2e4f73a6-57a5-44d3-bb53-29a574578cbd
target object 2e4f73a6-57a5-44d3-bb53-29a574578cbd