<class>org.onap.policy.models.dao.converters.CDataConditioner</class>
         <class>org.onap.policy.models.dao.converters.Uuid2String</class>
-        <class>org.onap.policy.models.base.concepts.PfConcepttKey</class>
+        <class>org.onap.policy.models.base.PfConceptKey</class>
         <class>org.onap.policy.models.dao.DummyConceptEntity</class>
         <class>org.onap.policy.models.dao.DummyReferenceEntity</class>
 
 
 /*-
  * ============LICENSE_START=======================================================
  *  Copyright (C) 2019 Nordix Foundation.
+ *  Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
 
 import java.lang.reflect.Type;
 import java.util.Iterator;
-
+import java.util.Map.Entry;
 import lombok.NonNull;
 
 import org.onap.policy.models.base.PfConceptKey;
  * GSON type adapter for TOSCA policies.
  *
  * @author Liam Fallon (liam.fallon@est.tech)
+ * @author Chenfei Gao (cgao@research.att.com)
  */
 public class ToscaPoliciesJsonAdapter implements JsonSerializer<ToscaPolicies>, JsonDeserializer<ToscaPolicies> {
     @Override
     }
 
     @Override
-    public JsonElement serialize(@NonNull final ToscaPolicies policy, @NonNull final Type type,
+    public JsonElement serialize(@NonNull final ToscaPolicies policies, @NonNull final Type type,
             @NonNull final JsonSerializationContext context) {
 
-        return null;
+        JsonArray policiesJsonArray = new JsonArray();
+
+        for (ToscaPolicy policy: policies.getConceptMap().values()) {
+            JsonElement policyEntry = new  ToscaPolicyJsonAdapter().serialize(policy, type, context);
+            policiesJsonArray.add(policyEntry);
+        }
+
+        return policiesJsonArray;
     }
 }
 
 /*-
  * ============LICENSE_START=======================================================
  *  Copyright (C) 2019 Nordix Foundation.
+ *  Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
 import com.google.gson.JsonSerializer;
 
 import java.lang.reflect.Type;
-
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
 import javax.ws.rs.core.Response;
 
 import lombok.NonNull;
  * GSON type adapter for TOSCA policies.
  *
  * @author Liam Fallon (liam.fallon@est.tech)
+ * @author Chenfei Gao (cgao@research.att.com)
  */
 public class ToscaPolicyJsonAdapter implements JsonSerializer<ToscaPolicy>, JsonDeserializer<ToscaPolicy> {
     // Logger for this class
     private static final Logger LOGGER = LoggerFactory.getLogger(ToscaPolicyJsonAdapter.class);
 
+    private static final String TYPE = "type";
+    private static final String DESCRIPTION = "description";
+    private static final String VERSION = "version";
+    private static final String METADATA = "metadata";
+    private static final String PROPERTIES = "properties";
+
     @Override
     public ToscaPolicy deserialize(@NonNull final JsonElement policyElement, @NonNull final Type type,
             @NonNull final JsonDeserializationContext context) {
         if (policyJsonMapObject.entrySet().size() != 1) {
             String errorMessage = "a policy list entry may only contain one and only one policy";
             LOGGER.debug(errorMessage);
-            throw new PfModelRuntimeException(Response.Status.NOT_ACCEPTABLE, errorMessage);
+            throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage);
         }
 
-        String policyName = policyJsonMapObject.entrySet().iterator().next().getKey();
-        JsonObject policyJsonObject = policyJsonMapObject.entrySet().iterator().next().getValue().getAsJsonObject();
+        final String policyName = policyJsonMapObject.entrySet().iterator().next().getKey();
+        final JsonObject policyJsonObject = policyJsonMapObject.entrySet().iterator().next()
+                                            .getValue().getAsJsonObject();
 
-        PfConceptKey policyKey = new PfConceptKey(policyName, policyJsonObject.get("version").getAsString());
+        // Set keys
+        PfConceptKey policyKey = new PfConceptKey(policyName, policyJsonObject.get(VERSION).getAsString());
         PfConceptKey policyTypeKey = new PfConceptKey(
-                policyJsonObject.get("type").getAsString(),
-                policyJsonObject.get("version").getAsString());
+                policyJsonObject.get(TYPE).getAsString(),
+                policyJsonObject.get(VERSION).getAsString());
         ToscaPolicy policy = new ToscaPolicy(policyKey, policyTypeKey);
 
-        // TODO: Rest of parsing
+        // Set description
+        if (policyJsonObject.has(DESCRIPTION)) {
+            final String policyDescription = policyJsonObject.get(DESCRIPTION).getAsString();
+            policy.setDescription(policyDescription);
+        }
+
+        // Set metadata
+        if (policyJsonObject.has(METADATA)) {
+            final JsonObject policyMetadataMapObject = policyJsonObject.get(METADATA).getAsJsonObject();
+            Map<String, String> policyMetadataMap = new HashMap<>();
+            for (Entry<String, JsonElement> entry : policyMetadataMapObject.entrySet()) {
+                final String policyMetadataEntryKey = entry.getKey();
+                final String policyMetadataEntryValue = entry.getValue().getAsString();
+                policyMetadataMap.put(policyMetadataEntryKey, policyMetadataEntryValue);
+            }
+            policy.setMetadata(policyMetadataMap);
+        }
 
+        // Set properties
+        if (policyJsonObject.has(PROPERTIES)) {
+            final JsonObject policyPropertiesMapObject = policyJsonObject.get(PROPERTIES).getAsJsonObject();
+            Map<String, Object> propertiesMap = new HashMap<>();
+            for (Entry<String, JsonElement> entry : policyPropertiesMapObject.entrySet()) {
+                final String policyPropertiesEntryKey = entry.getKey();
+                final JsonElement policyPropertiesEntryValue = entry.getValue();
+                propertiesMap.put(policyPropertiesEntryKey, policyPropertiesEntryValue);
+            }
+            policy.setProperties(propertiesMap);
+        }
         return policy;
     }
 
     public JsonElement serialize(@NonNull final ToscaPolicy policy, @NonNull final Type type,
             @NonNull final JsonSerializationContext context) {
 
-        return null;
+        JsonObject policyValJsonObject = new JsonObject();
+
+        // Add type
+        policyValJsonObject.addProperty(TYPE, policy.getType().getName());
+
+        // Add version
+        policyValJsonObject.addProperty(VERSION, policy.getType().getVersion());
+
+        // Add description
+        if (policy.getDescription() != null) {
+            policyValJsonObject.addProperty(DESCRIPTION, policy.getDescription());
+        }
+
+        // Add metadata
+        if (policy.getMetadata() != null) {
+            JsonObject metadataMapObject = new JsonObject();
+            for (Entry<String, String> entry : policy.getMetadata().entrySet()) {
+                final String entryKey = entry.getKey();
+                final String entryVal = entry.getValue();
+                metadataMapObject.addProperty(entryKey, entryVal);
+            }
+            policyValJsonObject.add(METADATA, metadataMapObject);
+        }
+
+        // Add properties
+        if (policy.getProperties() != null) {
+            JsonObject propertiesMapObject = new JsonObject();
+            for (Entry<String, Object> entry : policy.getProperties().entrySet()) {
+                final String entryKey = entry.getKey();
+                JsonElement entryVal = null;
+                if (entry.getValue() instanceof JsonElement) {
+                    entryVal = (JsonElement) entry.getValue();
+                }
+                propertiesMapObject.add(entryKey, entryVal);
+            }
+            policyValJsonObject.add(PROPERTIES, propertiesMapObject);
+        }
+
+        JsonObject policyJsonObject = new JsonObject();
+        policyJsonObject.add(policy.getKey().getName(), policyValJsonObject);
+        return policyJsonObject;
     }
 }
 
 /*-
  * ============LICENSE_START=======================================================
  *  Copyright (C) 2019 Nordix Foundation.
+ *  Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * GSON type adapter for TOSCA policies.
  *
  * @author Liam Fallon (liam.fallon@est.tech)
+ * @author Chenfei Gao (cgao@research.att.com)
  */
 public class ToscaServiceTemplateJsonAdapter
         implements JsonSerializer<ToscaServiceTemplate>, JsonDeserializer<ToscaServiceTemplate> {
+
+    private static final String TOPOLOGY_TEMPLATE = "topology_template";
+    private static final String TOSCA_DEFINITIONS_VERSION = "tosca_definitions_version";
+
     @Override
     public ToscaServiceTemplate deserialize(@NonNull final JsonElement serviceTemplateElement, @NonNull final Type type,
             @NonNull final JsonDeserializationContext context) {
         final PfConceptKey serviceTemplateKey = new PfConceptKey("IncomingServiceTemplate", "0.0.1");
         final ToscaServiceTemplate serviceTemplate = new ToscaServiceTemplate(serviceTemplateKey);
         serviceTemplate
-                .setToscaDefinitionsVersion(serviceTemplateJsonObject.get("tosca_definitions_version").getAsString());
+                .setToscaDefinitionsVersion(serviceTemplateJsonObject.get(TOSCA_DEFINITIONS_VERSION).getAsString());
 
-        if (serviceTemplateJsonObject.has("topology_template")) {
+        if (serviceTemplateJsonObject.has(TOPOLOGY_TEMPLATE)) {
             serviceTemplate.setTopologyTemplate(new ToscaTopologyTemplateJsonAdapter().deserialize(
-                    serviceTemplateJsonObject.get("topology_template"), ToscaTopologyTemplate.class, context));
+                    serviceTemplateJsonObject.get(TOPOLOGY_TEMPLATE), ToscaTopologyTemplate.class, context));
         }
 
         // Set the parent key of the topology template to be this service template
     public JsonElement serialize(@NonNull final ToscaServiceTemplate serviceTemplate, @NonNull final Type type,
             @NonNull final JsonSerializationContext context) {
 
-        return null;
+        JsonObject serviceTemplateJsonObject = new JsonObject();
+        JsonElement topologyTemplateJsonElement = new ToscaTopologyTemplateJsonAdapter()
+                .serialize(serviceTemplate.getTopologyTemplate(), type, context);
+
+        serviceTemplateJsonObject.addProperty(TOSCA_DEFINITIONS_VERSION, serviceTemplate.getToscaDefinitionsVersion());
+        serviceTemplateJsonObject.add(TOPOLOGY_TEMPLATE, topologyTemplateJsonElement);
+
+        return serviceTemplateJsonObject;
     }
 }
 
 /*-
  * ============LICENSE_START=======================================================
  *  Copyright (C) 2019 Nordix Foundation.
+ *  Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * GSON type adapter for TOSCA policies.
  *
  * @author Liam Fallon (liam.fallon@est.tech)
+ * @author Chenfei Gao (cgao@research.att.com)
  */
 public class ToscaTopologyTemplateJsonAdapter
         implements JsonSerializer<ToscaTopologyTemplate>, JsonDeserializer<ToscaTopologyTemplate> {
 
+    private static final String POLICIES = "policies";
+
     @Override
     public ToscaTopologyTemplate deserialize(@NonNull final JsonElement toplogyTemplateElement,
             @NonNull final Type type, @NonNull final JsonDeserializationContext context) {
         final PfReferenceKey topologyTemplateKey = new PfReferenceKey(new PfConceptKey(), "IncomingTopologyTemplate");
         final ToscaTopologyTemplate topologyTemplate = new ToscaTopologyTemplate(topologyTemplateKey);
 
-        if (topologyTemplateJsonObject.has("policies")) {
+        if (topologyTemplateJsonObject.has(POLICIES)) {
             topologyTemplate.setPolicies(new ToscaPoliciesJsonAdapter()
-                    .deserialize(topologyTemplateJsonObject.get("policies"), ToscaPolicies.class, context));
+                    .deserialize(topologyTemplateJsonObject.get(POLICIES), ToscaPolicies.class, context));
         }
 
         return topologyTemplate;
     public JsonElement serialize(@NonNull final ToscaTopologyTemplate topologyTemplate, @NonNull final Type type,
             @NonNull final JsonSerializationContext context) {
 
-        return null;
+        JsonObject topologyTemplateJsonObject = new JsonObject();
+        JsonElement policiesJsonElement = new ToscaPoliciesJsonAdapter()
+                .serialize(topologyTemplate.getPolicies(), type, context);
+
+        topologyTemplateJsonObject.add(POLICIES, policiesJsonElement);
+        return topologyTemplateJsonObject;
     }
 }
 
 
         assertEquals("onap.restart.tca:1.0.0",
                 serviceTemplate.getTopologyTemplate().getPolicies().get("onap.restart.tca").getId());
-        assertEquals("onap.restart.tca:1.0.0",
-                serviceTemplate.getTopologyTemplate().getPolicies().get("onap.restart.tca").getId());
     }
 
     @Test
 
         assertEquals("onap.restart.tca:1.0.0",
                 serviceTemplate.getTopologyTemplate().getPolicies().get("onap.restart.tca").getId());
-        assertEquals("onap.restart.tca:1.0.0",
-                serviceTemplate.getTopologyTemplate().getPolicies().get("onap.restart.tca").getId());
     }
 }