Exemple #1
0
        public T Decode <T>() where T : class
        {
            if (WebResponse.ContentLength == 0 || ContentType == null || WebResponse.StatusCode == HttpStatusCode.NoContent)
            {
                return(null);
            }

            MediaTypeReaderRegistration reader = Session.Service.CodecManager.GetReader(typeof(T), ContentType);
            ReaderContext context = new ReaderContext(WebResponse.GetResponseStream(), typeof(T), WebResponse, Session);
            T             result  = (T)reader.Codec.ReadFrom(context);

            ContextRegistrator.RegisterContext(Session, BaseUri, result);
            return(result);
        }
        public void CanRegisterContext()
        {
            // Arrange
            Record src = new Record
            {
                X     = 10,
                A     = new Item(),
                Links = new AtomLinkList
                {
                    new AtomLink("./path", "self", MediaType.ApplicationXml, "Link 1")
                },
                R1 = new Record
                {
                    X     = 5,
                    R1    = null,
                    A     = new Item(),
                    Links = new AtomLinkList
                    {
                        new AtomLink("./other", "self", MediaType.ApplicationXml, "Link 2")
                    }
                },
                RecordList = new List <Record>
                {
                    new Record
                    {
                        X  = 1,
                        R1 = new Record
                        {
                            Links = new AtomLinkList
                            {
                                new AtomLink("./new", "self", MediaType.ApplicationXml, "Link 3")
                            }
                        },
                        A     = new Item(),
                        Links = new AtomLinkList
                        {
                            new AtomLink("./sub", "self", MediaType.ApplicationXml, "Link 4")
                        }
                    }
                },
                RecordArray = new Record[1]
                {
                    new Record
                    {
                        R1 = new Record
                        {
                            Links = new AtomLinkList
                            {
                                new AtomLink("./array1", "self", MediaType.ApplicationXml, "Link 4")
                            }
                        },
                        A     = new Item(),
                        Links = new AtomLinkList
                        {
                            new AtomLink("./array2", "self", MediaType.ApplicationXml, "Link 6")
                        }
                    }
                }
            };

            Uri baseUrl = new Uri("http://elfisk.dk");

            // Act
            ContextRegistrator.RegisterContext(Session, baseUrl, src);

            // Assert
            Assert.AreEqual(10, src.X);
            Assert.AreEqual(baseUrl, src.A.BaseUri);
            Assert.AreEqual(new Uri(baseUrl, "path"), src.Links[0].HRef);
            Assert.AreEqual(baseUrl, src.R1.A.BaseUri);
            Assert.AreEqual(new Uri(baseUrl, "other"), src.R1.Links[0].HRef);
            Assert.AreEqual(baseUrl, src.RecordList[0].A.BaseUri);
            Assert.AreEqual(new Uri(baseUrl, "sub"), src.RecordList[0].Links[0].HRef);
            Assert.AreEqual(new Uri(baseUrl, "new"), src.RecordList[0].R1.Links[0].HRef);
            Assert.AreEqual(baseUrl, src.RecordArray[0].A.BaseUri);
            Assert.AreEqual(new Uri(baseUrl, "array2"), src.RecordArray[0].Links[0].HRef);
            Assert.AreEqual(new Uri(baseUrl, "array1"), src.RecordArray[0].R1.Links[0].HRef);
        }