C# XML序列化集合不';不显示在XML中

C# XML序列化集合不';不显示在XML中,c#,xml,serialization,xml-serialization,C#,Xml,Serialization,Xml Serialization,我正在尝试序列化一个继承接口ICollection的类,正如在网站上看到的那样,但它并没有出现在我的XML中。可能出了什么问题?为什么我的XMLSerializer没有包含AssertionAttribute集合?至于我的例子,我为所附的大量代码提前道歉 为此元素生成的XML: <saml:AttributeStatement xmlns:xs="http://www.w3.org/2001/XMLSchema" /> AssertionAttributes.cs-类应包含

我正在尝试序列化一个继承接口ICollection的类,正如在网站上看到的那样,但它并没有出现在我的XML中。可能出了什么问题?为什么我的XMLSerializer没有包含
AssertionAttribute
集合?至于我的例子,我为所附的大量代码提前道歉

为此元素生成的XML:

    <saml:AttributeStatement xmlns:xs="http://www.w3.org/2001/XMLSchema" />
AssertionAttributes.cs-类应包含AssertionAttribute类型的集合

[Serializable]
[XmlType(Namespace = "urn:oasis:names:tc:SAML:2.0:assertion")]
public class AssertionAttributes : ICollection
{
    [XmlNamespaceDeclarations]
    public XmlSerializerNamespaces xmlns = new XmlSerializerNamespaces();

    public AssertionAttributes()
    {
        xmlns.Add("saml", "urn:oasis:names:tc:SAML:2.0:assertion");
    }

    private ArrayList empArray = new ArrayList();

    public AssertionAttribute this[int index]
    {
        get { return (AssertionAttribute)empArray[index]; }
    }

    void ICollection.CopyTo(Array array, int index)
    {
        empArray.CopyTo(array, index);
    }

    int ICollection.Count
    {
        get { return empArray.Count; }
    }

    bool ICollection.IsSynchronized
    {
        get { return false; }
    }

    object ICollection.SyncRoot
    {
        get { return this; }
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return empArray.GetEnumerator();
    }

    public void Add(AssertionAttribute assertionAttribute)
    {
        empArray.Add(assertionAttribute);
    }
}
AssertionAttribute.cs-应在xml中显示为多个标记(生成时)

AttributeValue.cs-一个XML值,用于存储此元素的文本值

[Serializable]
[XmlType(Namespace="urn:oasis:names:tc:SAML:2.0:assertion")]
public class AttributeValue
{
    [XmlNamespaceDeclarations]
    public XmlSerializerNamespaces xmlns = new XmlSerializerNamespaces();

    public AttributeValue(string attributeValueText)
    {
        xmlns.Add("saml", "urn.oasis:names:tc:SAML:2.0:assertion");
        Text = attributeValueText;
    }

    private string text;

    [XmlText]
    public string Text
    {
        get { return text; }
        set { text = value; }
    }

}

默认情况下,在XML序列化期间,仅序列化对象的公共属性和字段。您的
AssertionAttribute
是一个公共字段,因此应该序列化它,对吗?实际上,否:请注意单词
object
:)。由于
AssertionAttribute
static
,因此它是类的字段,而不是类的对象的字段。如果您可以安排删除
static
修饰符之类的操作,那么应该可以做到这一点

[Serializable]
[XmlType(Namespace = "urn:oasis:names:tc:SAML:2.0:assertion")]
public class AssertionAttributes : ICollection
{
    [XmlNamespaceDeclarations]
    public XmlSerializerNamespaces xmlns = new XmlSerializerNamespaces();

    public AssertionAttributes()
    {
        xmlns.Add("saml", "urn:oasis:names:tc:SAML:2.0:assertion");
    }

    private ArrayList empArray = new ArrayList();

    public AssertionAttribute this[int index]
    {
        get { return (AssertionAttribute)empArray[index]; }
    }

    void ICollection.CopyTo(Array array, int index)
    {
        empArray.CopyTo(array, index);
    }

    int ICollection.Count
    {
        get { return empArray.Count; }
    }

    bool ICollection.IsSynchronized
    {
        get { return false; }
    }

    object ICollection.SyncRoot
    {
        get { return this; }
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return empArray.GetEnumerator();
    }

    public void Add(AssertionAttribute assertionAttribute)
    {
        empArray.Add(assertionAttribute);
    }
}
[Serializable]
[XmlType(Namespace = "urn:oasis:names:tc:SAML:2.0:assertion")]
public class AssertionAttribute
{
    [XmlAttribute(AttributeName = "NameFormat")]
    public string NameFormat = "urn:oasis:names:tc:SAML:2.0:attrname-format:basic";

    [XmlElement(ElementName = "AttributeValue")]
    public AttributeValue attributeValue;

    [XmlNamespaceDeclarations]
    public XmlSerializerNamespaces xmlns = new XmlSerializerNamespaces();

    public AssertionAttribute(string attributeValueText)
    {
        xmlns.Add("saml", "urn:oasis:names:tc:SAML:2.0:assertion");
        AttributeValueText = attributeValueText; 
        attributeValue = new AttributeValue(attributeValueText);
    }

    private string name;

    [XmlAttribute(AttributeName = "Name")]
    public string Name
    {
        get { return name; }
        set { name = value; }
    }

    private static string attributeValueText;

    public static string AttributeValueText
    {
        get { return attributeValueText; }
        set { attributeValueText = value; }
    }

}
[Serializable]
[XmlType(Namespace="urn:oasis:names:tc:SAML:2.0:assertion")]
public class AttributeValue
{
    [XmlNamespaceDeclarations]
    public XmlSerializerNamespaces xmlns = new XmlSerializerNamespaces();

    public AttributeValue(string attributeValueText)
    {
        xmlns.Add("saml", "urn.oasis:names:tc:SAML:2.0:assertion");
        Text = attributeValueText;
    }

    private string text;

    [XmlText]
    public string Text
    {
        get { return text; }
        set { text = value; }
    }

}