diff --git a/src/main/java/net/onrc/onos/core/intent/ShortestPathIntent.java b/src/main/java/net/onrc/onos/core/intent/ShortestPathIntent.java
index 92f57ad..5c4e961 100644
--- a/src/main/java/net/onrc/onos/core/intent/ShortestPathIntent.java
+++ b/src/main/java/net/onrc/onos/core/intent/ShortestPathIntent.java
@@ -1,11 +1,14 @@
 package net.onrc.onos.core.intent;
 
 import net.floodlightcontroller.util.MACAddress;
+import net.onrc.onos.core.topology.web.serializers.ShortestPathIntentSerializer;
 import net.onrc.onos.core.util.Dpid;
+import org.codehaus.jackson.map.annotate.JsonSerialize;
 
 /**
  * @author Toshio Koide (t-koide@onlab.us)
  */
+@JsonSerialize(using = ShortestPathIntentSerializer.class)
 public class ShortestPathIntent extends Intent {
     public static final long EMPTYMACADDRESS = 0;
     public static final int EMPTYIPADDRESS = 0;
diff --git a/src/main/java/net/onrc/onos/core/topology/LinkEvent.java b/src/main/java/net/onrc/onos/core/topology/LinkEvent.java
index 40d7400..9b6630f 100644
--- a/src/main/java/net/onrc/onos/core/topology/LinkEvent.java
+++ b/src/main/java/net/onrc/onos/core/topology/LinkEvent.java
@@ -3,12 +3,16 @@
 import java.nio.ByteBuffer;
 
 import net.onrc.onos.core.topology.PortEvent.SwitchPort;
+import net.onrc.onos.core.topology.web.serializers.LinkEventSerializer;
+import org.codehaus.jackson.map.annotate.JsonSerialize;
 
 /**
  * Self-contained Link event Object.
  * <p/>
  * TODO: We probably want common base class/interface for Self-Contained Event Object.
  */
+
+@JsonSerialize(using = LinkEventSerializer.class)
 public class LinkEvent {
     protected final SwitchPort src;
     protected final SwitchPort dst;
diff --git a/src/main/java/net/onrc/onos/core/topology/PortEvent.java b/src/main/java/net/onrc/onos/core/topology/PortEvent.java
index 1f20f22..39af378 100644
--- a/src/main/java/net/onrc/onos/core/topology/PortEvent.java
+++ b/src/main/java/net/onrc/onos/core/topology/PortEvent.java
@@ -1,5 +1,8 @@
 package net.onrc.onos.core.topology;
 
+import net.onrc.onos.core.topology.web.serializers.SwitchPortSerializer;
+import org.codehaus.jackson.map.annotate.JsonSerialize;
+
 import java.nio.ByteBuffer;
 
 /**
@@ -8,6 +11,7 @@
  * TODO: We probably want common base class/interface for Self-Contained Event Object.
  */
 public class PortEvent {
+    @JsonSerialize(using = SwitchPortSerializer.class)
     public static class SwitchPort {
         public final Long dpid;
         public final Long number;
diff --git a/src/main/java/net/onrc/onos/core/topology/web/serializers/LinkEventSerializer.java b/src/main/java/net/onrc/onos/core/topology/web/serializers/LinkEventSerializer.java
new file mode 100644
index 0000000..2621167
--- /dev/null
+++ b/src/main/java/net/onrc/onos/core/topology/web/serializers/LinkEventSerializer.java
@@ -0,0 +1,43 @@
+package net.onrc.onos.core.topology.web.serializers;
+
+import net.onrc.onos.core.topology.LinkEvent;
+import org.codehaus.jackson.JsonGenerator;
+import org.codehaus.jackson.map.SerializerProvider;
+import org.codehaus.jackson.map.ser.std.SerializerBase;
+
+import java.io.IOException;
+
+/**
+ * JSON serializer for LinkEvents.
+ */
+public class LinkEventSerializer extends SerializerBase<LinkEvent> {
+
+    /**
+     * Public constructor - just calls its super class constructor.
+     */
+    public LinkEventSerializer() {
+        super(LinkEvent.class);
+    }
+
+    /**
+     * Serializes a LinkEvent object.
+     *
+     * @param linkEvent LinkEvent to serialize
+     * @param jsonGenerator generator to add the serialized object to
+     * @param serializerProvider not used
+     * @throws IOException if the JSON serialization fails
+     */
+    @Override
+    public void serialize(final LinkEvent linkEvent,
+                          final JsonGenerator jsonGenerator,
+                          final SerializerProvider serializerProvider)
+            throws IOException {
+
+        jsonGenerator.writeStartObject();
+
+        jsonGenerator.writeObjectField("src", linkEvent.getSrc());
+        jsonGenerator.writeObjectField("dst", linkEvent.getDst());
+
+        jsonGenerator.writeEndObject();
+    }
+}
diff --git a/src/main/java/net/onrc/onos/core/topology/web/serializers/ShortestPathIntentSerializer.java b/src/main/java/net/onrc/onos/core/topology/web/serializers/ShortestPathIntentSerializer.java
new file mode 100644
index 0000000..f0fa00c
--- /dev/null
+++ b/src/main/java/net/onrc/onos/core/topology/web/serializers/ShortestPathIntentSerializer.java
@@ -0,0 +1,90 @@
+package net.onrc.onos.core.topology.web.serializers;
+
+
+import com.google.common.net.InetAddresses;
+import net.onrc.onos.core.intent.ShortestPathIntent;
+import org.codehaus.jackson.JsonGenerator;
+import org.codehaus.jackson.map.SerializerProvider;
+import org.codehaus.jackson.map.ser.std.SerializerBase;
+import org.openflow.util.HexString;
+
+import java.io.IOException;
+
+/**
+ * JSON serializer for ShortestPathIntents.
+ */
+public class ShortestPathIntentSerializer extends SerializerBase<ShortestPathIntent> {
+
+    /**
+     * Public constructor - just calls its super class constructor.
+     */
+    public ShortestPathIntentSerializer() {
+        super(ShortestPathIntent.class);
+    }
+
+    /**
+     * Converts an integer into a string representing an IP address.
+     *
+     * @param ipAddress integer representation of the address
+     * @return string that represents the address
+     */
+    private String toIPAddressString(final int ipAddress) {
+        return InetAddresses.fromInteger(ipAddress).getHostAddress();
+    }
+
+    /**
+     * Serializes a ShortestPathIntent object.
+     *
+     * @param intent Intent to serialize
+     * @param jsonGenerator generator to add the serialized object to
+     * @param serializerProvider not used
+     * @throws IOException if the JSON serialization fails
+     */
+    @Override
+    public void serialize(final ShortestPathIntent intent,
+                          final JsonGenerator jsonGenerator,
+                          final SerializerProvider serializerProvider)
+           throws IOException {
+        jsonGenerator.writeStartObject();
+
+        jsonGenerator.writeStringField("id", intent.getId());
+        jsonGenerator.writeStringField("state", intent.getState().toString());
+        jsonGenerator.writeStringField("pathFrozen",
+                                       Boolean.toString(intent.isPathFrozen()));
+
+        jsonGenerator.writeStringField("srcSwitchDpid",
+                                       HexString.toHexString(intent.getSrcSwitchDpid()));
+        jsonGenerator.writeStringField("srcPortNumber",
+                                       Long.toString(intent.getSrcPortNumber()));
+        jsonGenerator.writeStringField("srcMac",
+                                       HexString.toHexString(intent.getSrcMac()));
+        jsonGenerator.writeStringField("srcIp",
+                                       toIPAddressString(intent.getSrcIp()));
+
+        jsonGenerator.writeStringField("dstSwitchDpid",
+                HexString.toHexString(intent.getDstSwitchDpid()));
+        jsonGenerator.writeStringField("dstPortNumber",
+                                       Long.toString(intent.getDstPortNumber()));
+        jsonGenerator.writeStringField("dstMac",
+                                       HexString.toHexString(intent.getDstMac()));
+        jsonGenerator.writeStringField("dstIp",
+                                       toIPAddressString(intent.getDstIp()));
+
+        jsonGenerator.writeStringField("idleTimeout",
+                                       Integer.toString(intent.getIdleTimeout()));
+        jsonGenerator.writeStringField("hardTimeout",
+                                       Integer.toString(intent.getHardTimeout()));
+        jsonGenerator.writeStringField("firstSwitchIdleTimeout",
+                                       Integer.toString(intent.getFirstSwitchIdleTimeout()));
+        jsonGenerator.writeStringField("firstSwitchHardTimeout",
+                                       Integer.toString(intent.getFirstSwitchHardTimeout()));
+
+        jsonGenerator.writeArrayFieldStart("logs");
+        for (final String log : intent.getLogs()) {
+            jsonGenerator.writeObject(log);
+        }
+        jsonGenerator.writeEndArray();
+
+        jsonGenerator.writeEndObject();
+    }
+}
diff --git a/src/main/java/net/onrc/onos/core/topology/web/serializers/SwitchPortSerializer.java b/src/main/java/net/onrc/onos/core/topology/web/serializers/SwitchPortSerializer.java
new file mode 100644
index 0000000..c9820a5
--- /dev/null
+++ b/src/main/java/net/onrc/onos/core/topology/web/serializers/SwitchPortSerializer.java
@@ -0,0 +1,46 @@
+package net.onrc.onos.core.topology.web.serializers;
+
+import net.onrc.onos.core.topology.PortEvent.SwitchPort;
+import org.codehaus.jackson.JsonGenerator;
+import org.codehaus.jackson.map.SerializerProvider;
+import org.codehaus.jackson.map.ser.std.SerializerBase;
+import org.openflow.util.HexString;
+
+import java.io.IOException;
+
+/**
+ * JSON Serializer for SwitchPorts.
+ */
+public class SwitchPortSerializer extends SerializerBase<SwitchPort> {
+
+    /**
+     * Public constructor - just calls its super class constructor.
+     */
+    public SwitchPortSerializer() {
+        super(SwitchPort.class);
+    }
+
+    /**
+     * Serializes a SwitchPort object.
+     *
+     * @param switchPort object to serialize
+     * @param jsonGenerator generator to add the serialized object to
+     * @param serializerProvider not used
+     * @throws IOException if the serialization fails
+     */
+    @Override
+    public void serialize(final SwitchPort switchPort,
+                          final JsonGenerator jsonGenerator,
+                          final SerializerProvider serializerProvider)
+            throws IOException {
+        jsonGenerator.writeStartObject();
+
+        jsonGenerator.writeStringField("dpid",
+                                       HexString.toHexString(switchPort.getDpid()));
+        jsonGenerator.writeStringField("portNumber",
+                                       Long.toString(switchPort.getNumber()));
+
+        jsonGenerator.writeEndObject();
+    }
+
+}
