如何忽略正在尝试序列化的另一个类型列表中的类型中的属性?
public string SerializeTag(List<Tag> reservedTags)
{
string timestampFilenamePrefix = DateTime.Now.ToString("yyyyMMddHHmmss");
string filename = string.Format("ReservedTags_{0}.xml", timestampFilenamePrefix);
using (var stream = File.Create(filename))
{
var objectToBeSerialized = new CompanyDemoData();
objectToBeSerialized.TagsReserved = reservedTags;
var namespaces = new XmlSerializerNamespaces();
namespaces.Add("", "");
XmlAttributeOverrides xOver = new XmlAttributeOverrides();
XmlAttributes attrs = new XmlAttributes();
attrs.XmlIgnore = true;
xOver.Add(typeof(Tag), "GUID", attrs);
var serializer = new XmlSerializer(typeof(CompanyDemoData), xOver);
serializer.Serialize(XmlWriter.Create(stream), objectToBeSerialized, namespaces);
stream.Flush();
return filename;
}
}{
[XmlRoot("CompanyDemoData")]
public class CompanyDemoData
{
[XmlElement("Tag")]
public List<Tag> TagsReserved { get; set; }
}
}namespace Demo.Model
{
public class Tag
{
[XmlElement("TagId")]
public int ID { get; set; }
[XmlElement("GUID")]
public Guid Guid { get; set; }
}
}我试图避免在某些情况下序列化GUID属性。因此,我不想直接在标记类中设置XmlIgnore属性。我不想对GUID使用可空包装。
我认为错误在于我正在为类型CompanyDemoData创建一个序列化程序,它不包含我试图设置重写属性的属性。
提前感谢!
发布于 2020-05-08 10:45:11
这里的错误出现在参数member string中的xOver.Add(typeof(Tag), "GUID", attrs)中。
您传递的是XMLElement Name,而不是Member Name,即"GUID“而不是"Guid”。
这一行应该是xOver.Add(typeof(Tag), "Guid", attrs)。
我已经测试过了,而且效果很好。希望这对你有好处!
https://stackoverflow.com/questions/61676886
复制相似问题