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

时间:2017-01-19 14:05:20

标签: c# .net xml serialization xmlserializer

我只读了班上的财产

[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>

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类型的异常

1 个答案:

答案 0 :(得分:2)

我认为问题出在您的反序列化方法中,我会将其更改为返回对象:

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);
        }
    }
}

我的班级是:

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");

我看到所有字段:

enter image description here

这样做,如果你有一个有效的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>