For Custom Symbols implement the ESRI.ArcGIS.Client Namespace : IJsonSerializable Interface and this will add a toJson method. Then you will need to create the closest represent from a simple symbol as possible. Then return the toJson from the Simple Symbol.
The Text will need to be sent as a different Layer with TextMarkerSymbols.
An example of handling the custom Symbol is in the
nexVIEWer\nexVIEWer.QueryBase\Symbols\SelectedFillSymbol.cs File.
Ignore the IOverrideJsonSerialization Interface and focus on the IJsonSerializable Interface.
You could also capture the symbol as a bitmap and sent it as a base64string. To the WebMap
See imageData on a PictureMarkerSymbol:
http://resources.arcgis.com/en/help/arcgis-rest-api/index.html#/Symbol_Objects/02r3000000n5000000/
"symbol": {
"angle": 0,
"xoffset": 0,
"yoffset": 0,
"type": "esriPMS",
"url": "http://static.arcgis.com/images/Symbols/OutdoorRecreation/Sunny.png",
"imageData": "iVBO . . . ggg==",
"contentType": "image/png",
"width": 24,
"height": 24
}