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