我有一个包含XElement对象的类......
public class SomeClass
{
public string prop1 = "";
public string prop2 = "";
public XElement elem = null;
}
我稍后在代码中使用另一个内部定义的类对象的实例设置XElement属性...
UserFields userFields = new UserFields();
SomeClass sc = new SomeClass();
sc.prop1 = "Sam";
sc.prop2 = "Smith";
sc.elem = new XElement("UserFields", userFields);
问题在于,当我使用XmlSerializer将类对象序列化为XML时,我只获得SomeClass.elem属性的完全限定类名...
StringWriter sw = new StringWriter();
XmlSerializer x = new XmlSerializer(o.GetType());
x.Serialize(sw, o);
string xmlString = sw.ToString();
我把它作为输出......
<SomeClass>
<prop1>Sam</prop1>
<prop2>Smith</prop2>
<elem>MyNamespace.UserFields</elem>
</SomeClass>
似乎XmlSerializer不知道如何处理XElement对象。我想找到一种方法来将XElement对象中的XML序列化为XML字符串,就像其他类对象一样。有什么想法吗?
答案 0 :(得分:0)
好的,我找到了答案。问题不在于序列化,而在于类对象对XElement的赋值。由于类对象是您在任何C#项目中定义的普通普通类,因此对XElement的赋值是调用对象的ToString()方法,该方法返回完全限定的类名(是将对象序列化为XML后出现的内容。需要为XElement分配简单类型或其他X类型。在我的情况下,以下完成了所有课程的添加&#39; XElement的属性和后来的序列化按预期工作。 返回类似以下内容的内容...... List<XElement> items = new List<XElement>();
FieldInfo[] fields = typeof(UserFields).GetFields();
foreach (FieldInfo fld in fields)
items.Add(new XElement(fld.Name, fld.GetValue(userFields.Content)));
sc.elem = new XElement("UserFields", items);
<Root>
<SomeField>the value</SomeField>
...
<UserFields> <-- this section is what is generated from the list of XElement objects
<UserField1>value1</UserField1>
...
<UserFieldN>valueN</UserFieldN>
</UserFields>
</Root>