Это основной проект .net, работающий на Mac. У меня есть собственный класс Exception, который я сериализую как JSON в качестве вывода в случае ошибки.
public class HttpException : Exception {
private readonly int statusCode;
public HttpException() {}
public HttpException(int statusCode, string message) : base(message) {
this.statusCode = statusCode;
}
public int StatusCode {get {return this.statusCode;}}
}
Код, связанный с сериализацией json
Exception exception = (Exception)serviceRequest.ResultData;
MemoryStream memoryStream = new MemoryStream();
DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(typeof(Exception));
// it fails here
dataContractJsonSerializer.WriteObject(memoryStream, exception);
byte[] json = memoryStream.ToArray();
memoryStream.Close();
Console.WriteLine(Encoding.UTF8.GetString(json, 0, json.Length));
System.Runtime.Serialization.SerializationException: введите 'Service.Model.Exceptions.HttpException' с именем контракта данных 'HttpException: http://schemas.datacontract.org/2004/07/Service.Model.Exceptions 'не ожидается. Добавьте любые типы, которые не известны статически, в список известных типов, например, с помощью атрибута KnownTypeAttribute или путем добавления их в список известных типов, переданный в DataContractSerializer. в System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeAndVerifyType (DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, Boolean verifyKnownType, RuntimeTypeHandlehibitedTypeHandle, Type объявленныйType)
Изменить
Попытка использовать System.Web.Extensions, но есть волнистые линии.
2 ответа
Я хочу, но я не могу выйти за пределы сторонних библиотек, только нативные реализации из-за некоторых требований.
Вы можете включить библиотеку System.Web.Extensions и использовать JavaScriptSerializer
var ser = new JavaScriptSerializer();
string json = ser.Serialize(exception);
Но, как я сказал в комментариях, я бы предпочел Json.Net
System.Web.Extensions не поддерживается в .Net Core, но вы можете использовать пакет Nuget Newtonsoft.Json. Один из этих двух методов должен помочь:
Newtonsoft.Json.JsonConvert.DeserializeObject(string value)
Newtonsoft.Json.JsonConvert.DeserializeObject<T>(string value)
Я столкнулся с аналогичной проблемой при переносе модульных тестов с .Net 4.6.1 на .Net Core.
Кстати, если вы получаете какие-либо странные исключения времени выполнения, найдите экземпляры JavaScriptSerializer и замените их соответствующими методами Newtonsoft.Json.
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.