public void TestRdfXmlCollectionSerialization()
        {
            List <ChangeRequest> crListOut      = new List <ChangeRequest>();
            ChangeRequest        changeRequest1 = new ChangeRequest(new Uri("http://com/somewhere/changeRequest1"));

            changeRequest1.SetFixed(true);
            changeRequest1.AddAffectedByDefect(new Link(new Uri("http://com/somewhere/changeRequest2"), "Test of links"));

            crListOut.Add(changeRequest1);

            ChangeRequest changeRequest2 = new ChangeRequest(new Uri("http://com/somewhere/changeRequest2"));

            changeRequest2.SetFixed(false);
            changeRequest2.AddAffectedByDefect(new Link(new Uri("http://com/somewhere/changeRequest1"), "Test of links"));

            crListOut.Add(changeRequest2);

            IGraph rdfGraph = DotNetRdfHelper.CreateDotNetRdfGraph("http://com/somewhere/changerequests",
                                                                   "http://com/somewhere/changerequests?page=20",
                                                                   "http://com/somewhere/changerequests?page=21",
                                                                   null,
                                                                   crListOut,
                                                                   null);
            RdfXmlMediaTypeFormatter formatter = new RdfXmlMediaTypeFormatter(rdfGraph);

            string rdfXml = SerializeCollection <ChangeRequest>(formatter, crListOut, OslcMediaType.APPLICATION_RDF_XML_TYPE);

            Debug.WriteLine(rdfXml);

            List <ChangeRequest> crListIn = DeserializeCollection <ChangeRequest>(formatter, rdfXml, OslcMediaType.APPLICATION_RDF_XML_TYPE).ToList();

            Assert.AreEqual(crListOut.Count, crListIn.Count);

            //No guarantees of order in a collection, use the "about" attribute to identify individual ChangeRequests
            foreach (ChangeRequest cr in crListIn)
            {
                string crAboutUri = cr.GetAbout().AbsoluteUri;

                if (crAboutUri.Equals("http://com/somewhere/changeRequest1"))
                {
                    Assert.AreEqual(cr.IsFixed(), changeRequest1.IsFixed());
                    Assert.AreEqual(cr.GetAffectedByDefects()[0].GetValue(), changeRequest1.GetAffectedByDefects()[0].GetValue());
                    Assert.AreEqual(cr.GetAffectedByDefects()[0].GetLabel(), changeRequest1.GetAffectedByDefects()[0].GetLabel());
                }
                else if (crAboutUri.Equals("http://com/somewhere/changeRequest2"))
                {
                    Assert.AreEqual(cr.IsFixed(), changeRequest2.IsFixed());
                    Assert.AreEqual(cr.GetAffectedByDefects()[0].GetValue(), changeRequest2.GetAffectedByDefects()[0].GetValue());
                    Assert.AreEqual(cr.GetAffectedByDefects()[0].GetLabel(), changeRequest2.GetAffectedByDefects()[0].GetLabel());
                }
                else
                {
                    Assert.Fail("Deserialized ChangeRequest about attribute not recognized: " + crAboutUri);
                }
            }
        }
        public void TestRdfXmlSerialization()
        {
            ChangeRequest changeRequest1 = new ChangeRequest(new Uri("http://com/somewhere/changeReuest"));

            changeRequest1.SetFixed(true);
            changeRequest1.AddAffectedByDefect(new Link(new Uri("http://com/somewhere/changeRequest2"), "Test of links"));

            RdfXmlMediaTypeFormatter formatter = new RdfXmlMediaTypeFormatter();

            string rdfXml = Serialize <ChangeRequest>(formatter, changeRequest1, OslcMediaType.APPLICATION_RDF_XML_TYPE);

            Debug.WriteLine(rdfXml);

            ChangeRequest changeRequest2 = Deserialize <ChangeRequest>(formatter, rdfXml, OslcMediaType.APPLICATION_RDF_XML_TYPE);

            Assert.AreEqual(changeRequest1.GetAbout(), changeRequest2.GetAbout());
            Assert.AreEqual(changeRequest1.IsFixed(), changeRequest2.IsFixed());
            Assert.AreEqual(changeRequest1.GetAffectedByDefects()[0].GetValue(), changeRequest2.GetAffectedByDefects()[0].GetValue());
            Assert.AreEqual(changeRequest1.GetAffectedByDefects()[0].GetLabel(), changeRequest2.GetAffectedByDefects()[0].GetLabel());
        }
        public IEnumerable <T> DeserializeCollection <T>(
            string strRDF,
            IEnumerable <T> value,
            string contentType,
            string descriptionAbout  = null,
            string responseInfoAbout = null,
            string nextPageAbout     = null) where T : class
        {
            if (String.IsNullOrEmpty(descriptionAbout))
            {
                descriptionAbout = "http://com/undefined/descriptionAbout";
            }

            if (String.IsNullOrEmpty(responseInfoAbout))
            {
                responseInfoAbout = "http://com/undefined/responseInfoAbout";
            }

            if (String.IsNullOrEmpty(responseInfoAbout))
            {
                responseInfoAbout = "http://com/undefined/nextPageAbout";
            }

            Stream       stream  = new MemoryStream();
            StreamWriter writer  = new StreamWriter(stream);
            HttpContent  content = new StreamContent(stream);

            System.Net.Http.Formatting.MediaTypeFormatter formatter = null;

            if (contentType == OslcMediaType.APPLICATION_JSON)
            {
                JsonValue json = OSLC4Net.Core.JsonProvider.JsonHelper.CreateJson(
                    descriptionAbout,
                    responseInfoAbout,
                    nextPageAbout,
                    null,
                    value,
                    null);

                formatter = new OSLC4Net.Core.JsonProvider.JsonMediaTypeFormatter(json, false);
                content.Headers.ContentType = OslcMediaType.APPLICATION_JSON_TYPE;
            }
            else if (contentType == OslcMediaType.APPLICATION_RDF_XML)
            {
                IGraph rdfGraph = DotNetRdfHelper.CreateDotNetRdfGraph(
                    descriptionAbout,
                    responseInfoAbout,
                    nextPageAbout,
                    null,
                    value,
                    null);

                formatter = new RdfXmlMediaTypeFormatter(rdfGraph);
                content.Headers.ContentType = OslcMediaType.APPLICATION_RDF_XML_TYPE;
            }

            if (formatter == null)
            {
                return(null);
            }

            writer.Write(strRDF);
            writer.Flush();

            stream.Position = 0;

            return(formatter.ReadFromStreamAsync(typeof(List <T>), stream, content, null).Result as IEnumerable <T>);
        }