我只读了班上的财产
[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
类型的异常
答案 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");
我看到所有字段:
这样做,如果你有一个有效的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>