加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在Web Api项目中阅读CollectionJson内容

发布时间:2020-12-15 22:07:22 所属栏目:百科 来源:网络整理
导读:我有一个与 Conference API project类似的项目(几乎相同),它采用与返回CollectionJson内容的着名项目类似的方法.我很难设置ReadDocument的Collection属性(第30行),因为它没有任何setter.我可以通过执行以下更改来绕过此问题 public CollectionJsonContent(Co
我有一个与 Conference API project类似的项目(几乎相同),它采用与返回CollectionJson内容的着名项目类似的方法.我很难设置ReadDocument的Collection属性(第30行),因为它没有任何setter.我可以通过执行以下更改来绕过此问题

public CollectionJsonContent(Collection collection)
{
    var serializerSettings = new JsonSerializerSettings
        {
            NullValueHandling = NullValueHandling.Ignore,Formatting = Newtonsoft.Json.Formatting.Indented,ContractResolver = new CamelCasePropertyNamesContractResolver()
        };
    collection.Version = "1.0";

    Headers.ContentType = new MediaTypeHeaderValue("application/vnd.collection+json");

    using (var writer = new JsonTextWriter(new StreamWriter(_memoryStream)){CloSEOutput = false})
    {
        //var readDocument = new ReadDocument(); {IReadDocument.Collection = collection};
        var serializer = JsonSerializer.Create(serializerSettings);
        serializer.Serialize(writer,collection);
        writer.Flush();
    }
    _memoryStream.Position = 0;
}

虽然上面的代码编译并在某种程度上解决了问题但是我将再次遇到另一个问题,即无法在我的控制器单元测试中使用JsonCollection内容.请考虑以下单元测试代码段:

using (var request = CreateRequest())
            {                
                var controller = new TestController(DataService) {Request = request};

                var temp = await controller.ListAsync(gridSearchData,sampleSearchData);

                if ((temp is NotFoundResult) && (sampleCollection.Any()))
                {
                    Assert.Fail("Controller did not return any result but query did");
                }

                var json = await temp.ExecuteAsync(cancellationTokenSource);



                var readDocument = json.Content.ReadAsAsync<ReadDocument>(new[] {new CollectionJsonFormatter()},cancellationTokenSource).Result;

         }

由于我没有设置ReadDocument的集合属性,因此readDocument始终为空,我无法读取其内容.
如何在WEB API项目中异步读取客户端JsonCollection的内容?

要了解方法的清晰图片,请查看Conference Web Api
和authors blog

解决方法

好的,这已经修好了. Collection属性现在可以再次设置.

我刚刚用这个修复程序推动了release 0.7.0,一个主要的命名重构以及对序列化的一个很好的改进,而不是写出空集合.

请参阅release notes以了解更改(特别是命名,因为包名称和命名空间已更改)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读