它是在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:输入数据协定名称为“HttpException:http://schemas.datacontract.org/2004/07/Service.Model.Exceptions”的“Service.Model.Exceptions.HttpException” . 将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表中 . 在System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeAndVerifyType(DataContract dataContract,XmlWriterDelegator xmlWriter,Object obj,Boolean verifyKnownType,RuntimeTypeHandle declaredTypeHandle,Type declaredType)
Edit
尝试使用System.Web.Extensions但有波浪线 .
2 回答
您可以包含System.Web.Extensions库并使用JavaScriptSerializer
但正如我在评论中所说,我更愿意Json.Net
.Net Core不支持System.Web.Extensions,但您可以使用Newtonsoft.Json nuget包 . 这两种方法中的一种应该可以解决问题:
将.Net 4.6.1中的单元测试移植到.Net Core时遇到了类似的问题 .
另外,如果您遇到任何奇怪的运行时异常,请查找JavaScriptSerializer的实例并将其替换为相应的Newtonsoft.Json方法 .