diff --git a/src/main/java/net/onrc/onos/core/topology/web/serializers/LinkSerializer.java b/src/main/java/net/onrc/onos/core/topology/web/serializers/LinkSerializer.java
index bec4760..44f5cc3 100644
--- a/src/main/java/net/onrc/onos/core/topology/web/serializers/LinkSerializer.java
+++ b/src/main/java/net/onrc/onos/core/topology/web/serializers/LinkSerializer.java
@@ -1,6 +1,7 @@
 package net.onrc.onos.core.topology.web.serializers;
 
 import java.io.IOException;
+import java.util.Map.Entry;
 
 import net.onrc.onos.core.topology.Link;
 
@@ -27,6 +28,11 @@
         jsonGenerator.writeStartObject();
         jsonGenerator.writeObjectField("src", link.getSrcPort().asSwitchPort());
         jsonGenerator.writeObjectField("dst", link.getDstPort().asSwitchPort());
+        jsonGenerator.writeObjectFieldStart("stringAttributes");
+        for (Entry<String, String> entry : link.getAllStringAttributes().entrySet()) {
+            jsonGenerator.writeStringField(entry.getKey(), entry.getValue());
+        }
+        jsonGenerator.writeEndObject(); // stringAttributes
         jsonGenerator.writeEndObject();
     }
 }
diff --git a/src/main/java/net/onrc/onos/core/topology/web/serializers/PortSerializer.java b/src/main/java/net/onrc/onos/core/topology/web/serializers/PortSerializer.java
index a0d7385..69d710e 100644
--- a/src/main/java/net/onrc/onos/core/topology/web/serializers/PortSerializer.java
+++ b/src/main/java/net/onrc/onos/core/topology/web/serializers/PortSerializer.java
@@ -1,6 +1,7 @@
 package net.onrc.onos.core.topology.web.serializers;
 
 import java.io.IOException;
+import java.util.Map.Entry;
 
 import net.onrc.onos.core.topology.Port;
 
@@ -35,6 +36,11 @@
         jsonGenerator.writeNumberField("portNumber",
                                        (0xffff & port.getNumber().value()));
         jsonGenerator.writeStringField("desc", port.getDescription());
+        jsonGenerator.writeObjectFieldStart("stringAttributes");
+        for (Entry<String, String> entry : port.getAllStringAttributes().entrySet()) {
+            jsonGenerator.writeStringField(entry.getKey(), entry.getValue());
+        }
+        jsonGenerator.writeEndObject(); // stringAttributes
         jsonGenerator.writeEndObject();
     }
 }
diff --git a/src/main/java/net/onrc/onos/core/topology/web/serializers/SwitchSerializer.java b/src/main/java/net/onrc/onos/core/topology/web/serializers/SwitchSerializer.java
index 3b74c53..79516b4 100644
--- a/src/main/java/net/onrc/onos/core/topology/web/serializers/SwitchSerializer.java
+++ b/src/main/java/net/onrc/onos/core/topology/web/serializers/SwitchSerializer.java
@@ -1,6 +1,7 @@
 package net.onrc.onos.core.topology.web.serializers;
 
 import java.io.IOException;
+import java.util.Map.Entry;
 
 import net.onrc.onos.core.topology.Port;
 import net.onrc.onos.core.topology.Switch;
@@ -32,6 +33,11 @@
             jsonGenerator.writeObject(port);
         }
         jsonGenerator.writeEndArray();
+        jsonGenerator.writeObjectFieldStart("stringAttributes");
+        for (Entry<String, String> entry : sw.getAllStringAttributes().entrySet()) {
+            jsonGenerator.writeStringField(entry.getKey(), entry.getValue());
+        }
+        jsonGenerator.writeEndObject(); // stringAttributes
         jsonGenerator.writeEndObject();
     }
 }
diff --git a/src/test/java/net/onrc/onos/api/rest/TestRestTopologyGet.java b/src/test/java/net/onrc/onos/api/rest/TestRestTopologyGet.java
index edad41d..bf8d831 100644
--- a/src/test/java/net/onrc/onos/api/rest/TestRestTopologyGet.java
+++ b/src/test/java/net/onrc/onos/api/rest/TestRestTopologyGet.java
@@ -1,6 +1,7 @@
 package net.onrc.onos.api.rest;
 
 import net.onrc.onos.core.intent.runtime.PathCalcRuntimeModule;
+
 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
@@ -13,15 +14,14 @@
 import org.restlet.data.Status;
 import org.restlet.resource.ClientResource;
 
+import com.google.common.collect.ImmutableList;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 
 import static net.onrc.onos.api.rest.ClientResourceStatusMatcher.hasStatusOf;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.hasItems;
-import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.notNullValue;
+import static org.hamcrest.Matchers.*;
 
 /**
  * Tests for topology REST get operations.
@@ -59,12 +59,15 @@
      * @param switches JSON array of switches
      * @throws JSONException if the JSON is not properly specified
      */
+    @SuppressWarnings("unchecked")
     private void checkSwitches(final JSONArray switches) throws JSONException {
         assertThat(switches.length(), is(equalTo(4)));
 
         // Check that the first switch has the proper data
         final JSONObject switch0 = switches.getJSONObject(0);
-        assertThat(switch0.length(), is(equalTo(3)));
+        final List<String> keys = ImmutableList.<String>copyOf(switch0.keys());
+        assertThat(keys,
+                hasItems("dpid", "state", "ports"));
         assertThat(switch0.getString("dpid"), is(equalTo("00:00:00:00:00:00:00:02")));
         assertThat(switch0.getString("state"), is(equalTo("ACTIVE")));
 
