gpt4 book ai didi

c# - 列表项的条件 XML 序列化

转载 作者:太空宇宙 更新时间:2023-11-03 12:36:48 24 4
gpt4 key购买 nike

我想知道是否可以使用 ShouldSerialize* 模式有条件地将列表中的项目排除在序列化之外。以两个类为例:

public class Product{
public int ID {get; set;}
public List<Styles> ProductSyles {get; set;}
}

public class Styles{
public int ID {get; set;}
public bool Selected {get; set;}
public string StyleName {get; set;}
}

我能否仅使用 .Selected = true 序列化 ProductStyles 属性中的项目?这可能使用ShouldSerialize*吗?图案

最佳答案

XmlSerializer没有在序列化过程中忽略选定集合条目的内置功能。实现这一点的最快方法是使用代理数组属性,如下所示:

public class Product
{
public int ID { get; set; }

[XmlIgnore]
public List<Styles> ProductSyles { get; set; }

[XmlArray("ProductStyles")]
public Styles [] SerializableProductSyles
{
get
{
if (ProductSyles == null)
return null;
return ProductSyles.Where(s => s.Selected).ToArray();
}
set
{
if (value == null)
return;
ProductSyles = ProductSyles ?? new List<Styles>();
ProductSyles.AddRange(value);
}
}
}

(有关为什么应优先使用代理项数组而非代理项 List<Styles> 的解释,请参阅 here。)

关于c# - 列表项的条件 XML 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40640425/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com