12

C# Exceptions are ISerialisable so they can't also be DataContracts so I can't use JsonDataContractSerializer.

What are alternatives to serialising Exceptions to JSON?

user1919249
  • 287
  • 1
  • 3
  • 9
  • 1
    possible duplicate http://stackoverflow.com/questions/486460/how-to-serialize-an-exception-object-in-c – Mainul Feb 12 '16 at 08:51
  • 1
    [JSON Serialization Using Newtonsoft JSON Serialize](http://www.c-sharpcorner.com/UploadFile/dacca2/json-serialization-using-newtonsoft-json-serialize/) – Khan Abdulrehman Feb 12 '16 at 08:53
  • If you're willing to switch to [tag:json.net], you could use *Solution 2: Embed type information using TypeNameHandling.* from [How to (de)serialize a XmlException with Newtonsoft JSON?](https://stackoverflow.com/questions/35015357/how-to-deserialize-a-xmlexception-with-newtonsoft-json/35023491#35023491). – dbc Feb 12 '16 at 15:19
  • Khan - I was going to stay away from extra libraries but I think I will go with this solution. Mainul - I thought since the that question was 7 years old there might be out of date but I did consider creating a wrapping class. – user1919249 Feb 12 '16 at 22:19

1 Answers1

22

Since this has not really been answered yet: Just create a Dictionary containing the error properties you want, serialize it using JSON.NET and put it into a HttpResponseMessage:

catch (Exception e)
{
    var error = new Dictionary<string, string>
    {
        {"Type", e.GetType().ToString()},
        {"Message", e.Message},
        {"StackTrace", e.StackTrace}
    };

    foreach (DictionaryEntry data in e.Data)
        error.Add(data.Key.ToString(), data.Value.ToString());

    string json = JsonConvert.SerializeObject(error, Formatting.Indented);

    HttpResponseMessage response = new HttpResponseMessage();
    response.Content = new StringContent(json);

    return response;
}

I hope this can help some people out.

Johan Wintgens
  • 451
  • 6
  • 14