【发布时间】:2014-12-05 10:01:36
【问题描述】:
我需要将数据序列化为 XML,但我在弄清楚如何做到这一点时遇到了真正的麻烦。 (在 Visual Studio 中)
我需要创建这种类型的 XML,如下所示。但是 Object FormType 包含 ILists,它不会序列化。
<?xml version="1.0" encoding="utf-16"?>
<VersionXml xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ImportId>1</ImportId>
<Environment>SIT</Environment>
<DateExported>12/2/2014</DateExported>
<FormType>
<Id>4000</Id>
<FormTypeVersion>
<DisplayName>display name here</DisplayName>
<FormNumber>12345<FormNumber>
<Name>12345-abc<Name>
<CompanyId>1</CompanyId>
<Active>1<Active>
<RevisionHistoryNumber>2<RevisionHistoryNumber>
<FormTypeVersion>
<FormTypeVersion>
<DisplayName>display name here</DisplayName>
<FormNumber>12345<FormNumber>
<Name>12345-abc<Name>
<CompanyId>1</CompanyId>
<Active>1<Active>
<RevisionHistoryNumber>3<RevisionHistoryNumber>
<FormTypeVersion>
</FormType>
<FormType>
<Id>4001</Id>
<FormTypeVersion>
<DisplayName>another one here</DisplayName>
<FormNumber>456<FormNumber>
<Name>456-bcd<Name>
<CompanyId>1</CompanyId>
<Active>1<Active>
<RevisionHistoryNumber>3<RevisionHistoryNumber>
<FormTypeVersion>
<FormTypeVersion>
<DisplayName>another one here</DisplayName>
<FormNumber>456<FormNumber>
<Name>456-bcd<Name>
<CompanyId>1</CompanyId>
<Active>1<Active>
<RevisionHistoryNumber>1<RevisionHistoryNumber>
<FormTypeVersion>
</FormType>
</VersionXml>
这是我尝试创建的类,但 FormType 不会序列化并出现反射器错误
[Serializable]
public class FormXml
{
public string ImportID { get; set; }
public string Environment { get; set; }
public string DateExported { get; set; }
public IEnumerable<FormType> FormType { get; set; }
}
这是收到的错误:
Cannot serialize member FormXml.FormType of type System.Collections.Generic.IEnumerable`1..... because it is an interface.
我无法将 IList 更改为 List - 那么还有其他方法吗?
这里是 FormType.cs
[Serializable]
public class FormType : Entity
{
public virtual ProductCode Product { get; set; }
public virtual String DisplayName { get; set; }
public virtual String FormNumber { get; set; }
public virtual String Name { get; set; }
public virtual Boolean Active { get; set; }
private IList<FormTypeVersion> _versions = new List<FormTypeVersion>();
public virtual IList<FormTypeVersion> Versions
{
get { return _versions; }
set { _versions = value; }
}
}
【问题讨论】:
-
"1.....因为它是一个接口"你能告诉我FormType吗?你也用 [Serializable] 标记了 FormType 吗?
-
您使用的是哪个 IDE?
-
Visual Studio 2013 - 我添加了 FormType.cs,其中还包含 FormTypeVersion 对象的 IList
-
你不能将它们更改为 List
的原因是什么? -
查看从编辑 -> 选择性粘贴 -> 将 XML 粘贴为类中生成的类。可能会指导您完成您需要做的事情
标签: c# xml serialization