c#xmlSerializer失败,因为POCO生成器创建ICollection对象

时间:2017-07-05 13:34:03

标签: c# entity-framework xmlserializer

我在SO上看到了很多使用XmlSerializer的问题,是的,大多数问题似乎都是围绕着复杂的对象。

我的问题本质上是相同的,但有一个转折点。

我使用了Entityframework POCO生成器来创建我的数据库对象。

现在,我正在尝试使用XmlSerializer比较复杂对象。

所以在我的保存中,我正在做以下事情:

viewModelObj             = returned object model from MVC page.
db.originalData.ToList() = original data object

var a = SerializeObject(viewModelObj);
var b = SerializeObject(db.originalData.ToList()); 

使用我的SerializeObject函数的以下定义。

public static string SerializeObject(this List<myObject> toSerialize)
{
        var xmlSerializer = new XmlSerializer(toSerialize.GetType());
        using (StringWriter textWriter = new StringWriter())
        {
            xmlSerializer.Serialize(textWriter, toSerialize);
            return textWriter.ToString();
        }
 }

因为myObject反映了我的POCO类,所以列表被定义为ICollection,这反过来导致XmlSerializer失败并显示以下消息:

Cannot serialize member toSerialize of type System.Collections.Generic.ICollection`1[[myObject]] because it is an interface.

哪个是正确答案。

每次运行EF POCO Generator时,它都会将所有内容更改回ICollections,所以我的问题是如何使用POCO类来使用XmlSerializer?

更新

更改了代码
public static string SerializeObject(this List<myObject> toSerialize)

public static string SerializeObject<T>(this List<T> toSerialize)

这是我收到错误消息的时候:

Cannot serialize member [object] of type System.Collection.Generic.ICollection'1[[object]] because it is an interface.

1 个答案:

答案 0 :(得分:0)

刚刚放弃。通过添加状态字段并检查它是否已更改来重新编码此问题。