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); }