C# XML序列化集合不';不显示在XML中
我正在尝试序列化一个继承接口ICollection的类,正如在网站上看到的那样,但它并没有出现在我的XML中。可能出了什么问题?为什么我的XMLSerializer没有包含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-类应包含
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; }
}
}