在 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>
我只读了 属性 我的 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>