在 XmlSerializer 反序列化期间如何忽略只读 属性 设置?

How ignore read only property set during XmlSerializer deserialization?

我只读了 属性 我的 class

[XmlIgnore]
public string Amount
{
    get { return "Some value";  }
}

当我尝试从文件中反序列化对象时,我不希望反序列化抛出异常并且我没有收到对象。我尝试使用 xml ignore 属性,但它对我没有帮助。只有我需要设置的属性存在于我的文件中。

XML 文件

<?xml version="1.0" encoding="utf-8"?>
<Class xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Id>1</KaumeheId>
  <PrivaatKey>123</PrivaatKey>
</Class>

Class

public class Class
{
    public int Id { get; set; }
    public string PrivaatKey { get; set; }
    public string Amount
    {
        get { return "Some value"; }
    }
}

序列化器

public static class XmlDeserializerService<T>
{
    public static void LoadDataToClass(T obj, string filePath)
    {

        XmlSerializer serializer = new XmlSerializer(typeof(T));
        using (FileStream fileStream = new FileStream(filePath, FileMode.Open))
        {
            obj = (T) serializer.Deserialize(fileStream);
        }
    }
}

附加信息(已修改):

如果我在 obj.Amount 下查看调试器,我有 Amount = 'obj.Amount' 抛出了 System.NullReferenceException

类型的异常

我认为问题出在你的反序列化方法中,我会将其更改为 return object:

public static class XmlDeserializerService<T>
{
    public static T LoadDataToClass(string filePath)
    {    
        XmlSerializer serializer = new XmlSerializer(typeof(T));
        using (FileStream fileStream = new FileStream(filePath, FileMode.Open))
        {
            return  (T)serializer.Deserialize(fileStream);
        }
    }
}

我的 Class 是:

public class Class
{
    public int Id { get; set; }
    public string PrivaatKey { get; set; }  
    public string Amount
    {
        get { return "Some value"; }
    }
}

如果我在那之后使用它:

var r = XmlDeserializerService<Class>.LoadDataToClass(@"yourxml");

我看到所有字段:

这行得通,如果您有一个有效的 xml,您提供的那个有无效的 Id 标签。有效的是:

<?xml version="1.0" encoding="utf-8"?>
<Class xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Id>1</Id>
  <PrivaatKey>123</PrivaatKey>
</Class>