在序列化期间处理列表名称的最佳实践

时间:2014-04-09 18:00:50

标签: c# list serialization asp.net-web-api

我有一个对象列表,我通过WebAPI返回并从同一个WebApi创建。如果它们是另一个类的一部分,那么我可以使用DataContract简单地装饰它,并且一切运行良好。

public class ParentClass()
{
    [DataContract(Name = "Children", Namespace = "http://schemas.blah.blah"]
    public List<ChildClass> Children
}

当我直接返回List时会出现问题。当我这样做时,我丢失了DataContract名称和命名空间。

我可以创建另一个类

[DataContract(Name = "Children", Namespace = "http://schemas.blah.blah"]
public class ChildrenList : List<ChildClass>
{
}

并将我的父类更改为

public class ParentClass()
{
    public ChildrenList Children
}

解决了这个问题,但创造了更多。首先是我失去了做

的能力
ChildrenList results = getchildrenlistfromsomemethod();
results = results.OrderByDescending(p => p.Rank).ToList();

我可以用纯清单做什么。扩展列表也是不好的做法。我可以通过从Collection扩展来解决这个问题但是我仍然遇到上述问题而且我丢失了AddRange()方法。

我的问题是

1)是否有一种简单的方法可以使某个类型的List始终序列化为某个名称和名称空间?

2)将List扩展为最佳选项,我只是在转换为列表,执行orderby,groupby等之间插入....然后将项目添加回foreach循环中的新扩展列表中。 (似乎代价高昂)

3)我是否错过了解决此问题的一种非常明显且简单的方法?

1 个答案:

答案 0 :(得分:0)

尝试使用支持字段声明List:

    [DataContract(Name = "Children", Namespace = @"http://schemas.blah.blah"])
    private ChildClass _children;

    public List<ChildClass> Children
    {
        get { return _children; }
        set { _children = value }
    }