C#序列化跳过xsi:nil=“”;真“;如果自定义对象中提供了其他属性

本文关键字:对象 自定义 属性 其他 如果 xsi nil 序列化 | 更新日期: 2023-09-27 18:00:36

我不确定我是否已经确定了问题,但我的C#XML序列化似乎正在跳过添加"xsi:nil='true',如果存在(我不确定解决哪一个或如何解决)

  1. 提供了其他属性或
  2. 这是一个自定义对象

例如,

[System.Xml.Serialization.XmlElementAttribute("Custom", IsNullable = true)]
public customDataType Custom
{
        get { return this.privateCustomField; }
        set { this.privateCustomField= value; }
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.namespace.org")]
public partial class customDataType
{
    private string attrField;
    private string valueField;
    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string AttrField
    {
        get { return this.attrField; }
        set { this.attrField= value; }
    }
    /// <remarks/>
    [System.Xml.Serialization.XmlTextAttribute()]
    public string Value
    {
        get { return this.valueField; }
        set { this.valueField = value;}
    }
}

然后在我的课堂上,我创建了:

    Custom mycustom = new Custom();
    mycustom.AttrField = "7701003";

仅此而已(我不提供)。当我序列化我的对象时,我得到的XML看起来像:

<自定义AttrField="7701003"/>

我想看看<自定义xsi:nil="true"AttrField="7701003"/>

也就是说,我没有添加nil="true"。我不确定,因为自定义的数据类型(而不是我在网上看到的int或string)或者有一个属性

我使用的类是使用XSD.exe 4.0.30319从XSD创建的。

谢谢!

C#序列化跳过xsi:nil=“”;真“;如果自定义对象中提供了其他属性

如果不编辑类,自动生成类就无法工作。试试这个

    [XmlRoot("Custom")]
    public class Custom
    {
        [XmlElement("CustomDataType")]
        public CustomDataType customDataType { get; set; }
    }
    [XmlRoot("CustomDataType")]
    public partial class CustomDataType
    {
        [XmlAttribute("AttrField")]
        public string attrField { get; set; }
        [XmlAttribute("Value")]]
        public string value {get;set;}
    }

我最终没有使用以上内容,所以我不知道这是否有效。我很感激你的回答。由于类生成的大小(XSD的大小是我开始使用它的原因),我无法在项目完成时及时编辑所有对象。

目前还没有答案。