WCF服务:在不创建新类或合同的情况下,仅返回大对象的一部分作为JSON

时间:2015-10-18 06:39:40

标签: c# json web-services wcf

因此,我们假设我们有一个实体Article,它具有庞大的底层数据结构。我们需要在客户端上为2目的这篇文章:

  1. 获取仅包含最相关属性的文章列表,例如id,title,price
  2. 获取包含整个数据结构的一篇文章的详细视图。
  3. 有这样的WCF服务方法,产生JSON响应:

    Public List<Article> GetArticles(string anId, bool isMinimal)
    {
        using (var client = new MyApp.Model.MyAppEntities())
        {
            var articles = new List<Article>();
    
            myObjects = //Linq-magic to get values from db...
    
            if (!isMinimal)
            {
                //add a huge datastructure from other tables to each of myObjects
                // these are vitamins, allergeens, nutrients and so on for some article.
                });
            }
    
            return articles;
        }
    }
    

    因此,当isMinimal为true时,整个底层数据结构不会被填充。但是(有些正确,正如方法签名所示),返回整个List<Article>,并且未填充属性的空值。

    我想要实现的是:当isMinimal为true时,让此方法仅返回填充的值,并且“从返回的json中删除剩余的值”。我想创建一个“一般的json响应”(一个字符串?),然后让它返回所需的值,所以将Methods签名更改为这样:

    Public List<JSONresponse> GetArticles(string anId, bool isMinimal)
    {
        using (var client = new MyApp.Model.MyAppEntities())
        {
            var articles = new List<JSON>();
    
            myObjects = getMyObjectsFromDb();//Linq-magic to get values from db...
            //adding the whole datastructe here now...
            var articleJSON = articles.toJSON();
            if (isMinimal)
            {
                articleJSON = articleJSON.Select(s => new JSON(){ title: s.title, price: s.price, Id: s.Id});
            }
    
            return articleJSON;
        }
    }
    

    但说实话,我不知道这一般是否可行,所以我对此非常挣扎。

    由于在我的许多应用程序中使用了wcfservices,我宁愿不为像ArticleMinimal之类的Object(DTO)创建另一个方法,因为在任何地方更新服务引用都会产生一些开销。

    如果有人可以帮助我,那会很棒!

    最诚挚的问候, 多米尼克

0 个答案:

没有答案