如何将 Xml 字符串反序列化为具有私有 setter 属性的对象?

How to deserialize an Xml String into an object that has properties with private setters?

我正在通过网络接收一个 Xml 字符串,我希望能够将它的内容放入一个对象中。当我将 class 的 setter 保留为 public 时,它工作得很好。但是,我希望能够将它们保密,在这种情况下我会收到以下错误:

System.InvalidOperationException: 'Cannot deserialize type 'MyApp.Random' because it contains property 'data' which has no public setter.'

我在网上找遍了,还没找到解决办法。

我的class很简单,像这样:

public class Random
{
    public string data{ get;  private set; }

    public string abc{ get;  private set; }

    public string defg{ get;  private set; }
}

这就是我尝试反序列化它的方式:

var serializer = new XmlSerializer(typeof(Random));

result = (Random)serializer.Deserialize(new StringReader(xmlString));

已修复。我只是使用 DataContractSerializer 而不是 XmlSerializer,它的效果非常好。这是解决方案:

var ser = new DataContractSerializer(typeof(Random));
Random result = (Random)ser.ReadObject(new MemoryStream(xmlString));