【发布时间】:2017-05-07 11:58:02
【问题描述】:
我有一个具有两个属性的类(使用 xsd.exe 从 xsd 生成)并填充它们并尝试使用以下代码将它们序列化为 xml。
我能够获取包含元素的 xml,但没有我分配的字段/元素
OrganizationDetail objOrgDet = new OrganizationDetail();
objOrg.IsDataLimitedSet =true;
Organization objOrg = new Organization();
objOrg.Orgainzation_Detail = objOrgDet;
XmlSerializer serailizer = new XmlSerializer(typeof(Organization));
StringWriter strwritter = new StringWriter();
serailizer.Serialize(strwritter, objOrg);
string xml = strwritter.ToString();
而生成的 xml 是
<?xml version="1.0" encoding="utf-16"?>
<Organization xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Organization_DETAIL xmlns="http://www.mismo.org/residential/2009/schemas" />
</Organization>
这没有我设置的字段。
【问题讨论】:
-
您必须为您的属性
DataLimited提供一个值。我希望IsDataLimitedSet是用XmlIgnore装饰的,以防止它出现。 -
@rene 是的,我刚刚发现了,但是为什么要添加这个 System.Xml.Serialization.XmlIgnoreAttribute() 注释有什么线索?
-
是的,IIRC 是为具有 xsi:nil="true" 或 minoccurs=0 并且映射到类上的非空类型的元素添加的。在反序列化期间,无论 Is[NameofProperty]Set 是真还是假,不可为空的类型都将具有其默认值,具体取决于有效负载中是否存在该元素。
-
谢谢@rene,实际上我有 minoccurs=0 ,我认为这意味着如果未设置值,它将不会在 xml 中应用,但如果我们设置属性,它必须包含在内,所以我想知道获取具有 minOccurs=0 的属性的解决方案是什么?
标签: c# xml xsd xml-serialization xmlserializer