它是在Mac上运行的.net核心项目。我有一个自定义的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,RuntimeTypeHandle declaredTypeHandle,Type declaredType)
修改
尝试使用System.Web.Extensions但是有粗糙的行。
答案 0 :(得分:0)
我希望但是我不能脱离第三方库,因为有些要求,只能使用原生实现。
您可以包含System.Web.Extensions库并使用 JavaScriptSerializer
var ser = new JavaScriptSerializer();
string json = ser.Serialize(exception);
但正如我在评论中所说,我更希望Json.Net
答案 1 :(得分:0)
System.Web.Extensions,但是您可以使用Newtonsoft.Json nuget包。这两种方法之一应该可以解决问题:
Newtonsoft.Json.JsonConvert.DeserializeObject(string value)
Newtonsoft.Json.JsonConvert.DeserializeObject<T>(string value)
将单元测试从.Net 4.6.1移植到.Net Core时遇到了类似的问题。
在旁注中,如果遇到任何奇怪的运行时异常,请查找JavaScriptSerializer的实例,并将其替换为相应的Newtonsoft.Json方法。