protected String convertToXml(Object obj, RequestItem request) { MemoryStream ms = new MemoryStream(); XmlWriter xw = XmlWriter.Create(ms, new XmlWriterSettings { Indent = true }); using (var writer = XmlDictionaryWriter.CreateDictionaryWriter(xw)) { if (obj is IRestfulCollection) { IRestfulCollection collection = (IRestfulCollection)obj; var responses = collection.getEntry(); writer.WriteStartElement("response", osNameSpace); writer.WriteElementString("startIndex", collection.startIndex.ToString()); if (request.getCount().HasValue) { writer.WriteElementString("itemsPerPage", request.getCount().ToString()); } writer.WriteElementString("totalResults", collection.totalResults.ToString()); writer.WriteElementString("isFiltered", collection.isFiltered.ToString().ToLower()); writer.WriteElementString("isSorted", collection.isSorted.ToString().ToLower()); writer.WriteElementString("isUpdatedSince", collection.isUpdatedSince.ToString().ToLower()); foreach (var item in (IList)responses) { writer.WriteStartElement("entry"); //ser.WriteObject(writer, item); XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("", osNameSpace); XmlSerializer ser = new XmlSerializer(item.GetType()); ser.Serialize(writer, item, ns); writer.WriteEndElement(); } writer.WriteEndElement(); } else if (obj is DataCollection) { XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("", osNameSpace); XmlSerializer ser = new XmlSerializer(obj.GetType()); ser.Serialize(writer, obj, ns); } else { throw new Exception("XMLSerialization: shouldn't have got here"); } writer.Flush(); return(Encoding.UTF8.GetString(ms.ToArray())); } }
public String convertToAtom(Object obj, RequestItem request) { MemoryStream ms = new MemoryStream(); XmlWriter xw = XmlWriter.Create(ms, new XmlWriterSettings { Indent = true, OmitXmlDeclaration = true }); using (var writer = XmlDictionaryWriter.CreateDictionaryWriter(xw)) { var userIds = request.getUsers(); IEnumerator <UserId> users = userIds.GetEnumerator(); users.MoveNext(); writer.WriteStartElement("feed", "http://www.w3.org/2005/Atom"); writer.WriteXmlnsAttribute("osearch", osearchNameSpace); writer.WriteStartElement("author"); writer.WriteElementString("uri", guidPrefix + ":" + users.Current.getUserId()); writer.WriteEndElement(); // author if (obj is IRestfulCollection) { IRestfulCollection collection = (IRestfulCollection)obj; int totalResults = collection.totalResults; int itemsPerPage = request.getCount() ?? RequestItem.DEFAULT_COUNT; int startIndex = collection.startIndex; //int endPos = (startIndex + itemsPerPage) > totalResults ? totalResults : (startIndex + itemsPerPage); writer.WriteStartElement("link"); writer.WriteAttributeString("ref", "self"); writer.WriteAttributeString("href", new Uri("http://" + request.getParameter("HTTP_HOST") + request.getParameter("URL")).ToString()); writer.WriteEndElement(); // link // Add osearch & next link to the entry addPagingFields(writer, request, startIndex, itemsPerPage, totalResults); // Add response entries to feed var responses = collection.getEntry(); foreach (var response in (IList)responses) { writer.WriteStartElement("entry"); // Special hoisting rules for activities if (response is Activity) { addActivityData(writer, response as Activity); } else if (response is Person) { addPeopleData(writer, response as Person); } else if (response is MessageCollection) { addMesssageCollectionData(writer, response as MessageCollection); } else { throw new Exception("AtomConverter: unsupported object"); } writer.WriteEndElement(); // entry } } else if (obj is DataCollection) // AppData { var collection = (DataCollection)obj; // TODO: fixed osearch for appData addPagingFields(writer, request, 0, collection.entry.Count, collection.entry.Count); foreach (var e in collection.entry) { writer.WriteStartElement("entry"); writer.WriteElementString("id", e.Key); writer.WriteStartElement("content"); writer.WriteAttributeString("type", ContentTypes.OUTPUT_XML_CONTENT_TYPE); foreach (var item in e.Value) { writer.WriteStartElement("entry"); writer.WriteElementString("key", item.Key); writer.WriteElementString("value", item.Value); writer.WriteEndElement(); // entry } writer.WriteEndElement(); // content writer.WriteEndElement(); // entry } } else { throw new Exception("AtomConverter: unsupported object"); } writer.WriteEndElement(); // feed xw.Flush(); return(Encoding.UTF8.GetString(ms.ToArray())); } }