Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 只能对Type.IsGenericParameter为true的类型调用Jil序列化程序方法_C#_Json_Serialization_Jil - Fatal编程技术网

C# 只能对Type.IsGenericParameter为true的类型调用Jil序列化程序方法

C# 只能对Type.IsGenericParameter为true的类型调用Jil序列化程序方法,c#,json,serialization,jil,C#,Json,Serialization,Jil,我有一个自定义日志消息对象,我正试图用Jil将其序列化为JSON格式。这是我第一次使用Jil而不是默认的JSON.Net序列化程序,所以我对它不是很熟悉 日志消息对象的属性之一是异常。当Exception属性为null时,Jil将毫无问题地序列化对象。但是,如果使用实际异常填充Exception对象,则会从System.InvalidOperationException类型的Jil中得到一个错误 消息:只能对Type.IsGenericParameter为true的类型调用方法 StackTra

我有一个自定义日志消息对象,我正试图用Jil将其序列化为JSON格式。这是我第一次使用Jil而不是默认的JSON.Net序列化程序,所以我对它不是很熟悉

日志消息对象的属性之一是异常。当Exception属性为null时,Jil将毫无问题地序列化对象。但是,如果使用实际异常填充Exception对象,则会从System.InvalidOperationException类型的Jil中得到一个错误

消息:只能对Type.IsGenericParameter为true的类型调用方法

StackTrace:at System.RuntimeType.get_GenericParameterPosition()at _Jil.SerializeDynamic.DynamicSerializer.Serialize半静态(MemberInfo)中的DynamicMethod43(TextWriter,RuntimeType,Int32) dynamicMember、TextWriter流、对象val、选项opts、Int32 深度 c:\Users\kevin\u 000\Dropbox\jil\jil\SerializeDynamic\DynamicSerializer.cs:line 237在 Jil.SerializeDynamic.DynamicSerializer.SerializeInternal(MemberInfo dynamicMember、TextWriter流、对象obj、选项选项、Int32 深度 c:\Users\kevin\u 000\Dropbox\jil\jil\SerializeDynamic\DynamicSerializer.cs:line 836 at Jil.SerializeDynamic.DynamicSerializer.Serialize(TextWriter 流、对象对象、选项选项选项、Int32深度) c:\Users\kevin\u 000\Dropbox\jil\jil\SerializeDynamic\DynamicSerializer.cs:line 746 at_DynamicMethod40(TextWriter,RuntimeMethodInfo,Int32)
在 Jil.SerializeDynamic.DynamicSerializer.Serialize半静态(MemberInfo dynamicMember、TextWriter流、对象val、选项opts、Int32 深度 c:\Users\kevin\u 000\Dropbox\jil\jil\SerializeDynamic\DynamicSerializer.cs:line 237在 Jil.SerializeDynamic.DynamicSerializer.SerializeInternal(MemberInfo dynamicMember、TextWriter流、对象obj、选项选项、Int32 深度 c:\Users\kevin\u 000\Dropbox\jil\jil\SerializeDynamic\DynamicSerializer.cs:line 836 at Jil.SerializeDynamic.DynamicSerializer.Serialize(TextWriter 流、对象对象、选项选项选项、Int32深度) c:\Users\kevin\u 000\Dropbox\jil\jil\SerializeDynamic\DynamicSerializer.cs:line 746 at_DynamicMethod23(文本编写器、操作取消异常、, Int32)在 Jil.SerializeDynamic.DynamicSerializer.Serialize半静态(MemberInfo dynamicMember、TextWriter流、对象val、选项opts、Int32 深度 c:\Users\kevin\u 000\Dropbox\jil\jil\SerializeDynamic\DynamicSerializer.cs:line 237在 Jil.SerializeDynamic.DynamicSerializer.SerializeInternal(MemberInfo dynamicMember、TextWriter流、对象obj、选项选项、Int32 深度 c:\Users\kevin\u 000\Dropbox\jil\jil\SerializeDynamic\DynamicSerializer.cs:line 836 at Jil.SerializeDynamic.DynamicSerializer.Serialize(TextWriter 流、对象对象、选项选项选项、Int32深度) c:\Users\kevin\u 000\Dropbox\jil\jil\SerializeDynamic\DynamicSerializer.cs:line 746 at_DynamicMethod4(文本编写器、日志消息、Int32)at Jil.SerializeDynamic.DynamicSerializer.Serialize半静态(MemberInfo dynamicMember、TextWriter流、对象val、选项opts、Int32 深度 c:\Users\kevin\u 000\Dropbox\jil\jil\SerializeDynamic\DynamicSerializer.cs:line 237在 Jil.SerializeDynamic.DynamicSerializer.SerializeInternal(MemberInfo dynamicMember、TextWriter流、对象obj、选项选项、Int32 深度 c:\Users\kevin\u 000\Dropbox\jil\jil\SerializeDynamic\DynamicSerializer.cs:line 836 at Jil.SerializeDynamic.DynamicSerializer.Serialize(TextWriter 流、对象对象、选项选项选项、Int32深度) c:\Users\kevin\u 000\Dropbox\jil\jil\SerializeDynamic\DynamicSerializer.cs:line 746 at Jil.JSON.SerializeDynamic(对象数据、TextWriter输出、, c:\Users\kevin\u 000\Dropbox\jil\jil\JSON.cs中的选项:第64行 在中的Jil.JSON.SerializeDynamic(对象数据、选项) c:\Users\kevin\u 000\Dropbox\jil\jil\JSON.cs:第84行 JSON.Serialize[T](T数据,选项)在 c:\Users\kevin\u 000\Dropbox\jil\jil\JSON.cs:第4584行 StackExchange.Redis.Extensions.Jil.JilSerializer.Serialize(对象 项目)在 StackExchange.Redis.Extensions.Jil.JilSerializer.c_uudisplayClass4_0.b_u0() 位于System.Threading.Tasks.Task`1.InnerInvoke()的 System.Threading.Tasks.Task.Execute()

我正在使用以下Jil序列化选项:

new Jil.Options(false, true, false, DateTimeFormat.ISO8601, true, UnspecifiedDateTimeKindBehavior.IsUTC, SerializationNameFormat.CamelCase);
我用来调用Jil的方法是:

public byte[] Serialize(object item)
{
    var jsonString = JSON.Serialize(item);
    return encoding.GetBytes(jsonString);
}
我尝试序列化的完整对象是:

public class LogMessage
{
public LogMessage()
{
    CreatedDate = DateTime.UtcNow;
}

public LogLevel LogLevel { get; set; }
public string Message { get; set; }
public DateTime CreatedDate { get; private set; }
public string AccessToken { get; set; }
public long? ParticipantId { get; set; }
public string UserName { get; set; }
public bool IsAuthenticated { get; set; }
public string Url { get; set; }
public Exception Exception { get; set; }
public string StackTrace { get; set; }
public string Details { get; set; }
public string ClientIpAddress { get; set; }
public string EntryApplication { get; set; }
public string AuthenticationMethod { get; set; }
public string AuthenticationClientId { get; set; }
public string LoggingApplication { get; set; }

[Description("This is the combination of ClassName - MethodeName")]
public string MethodName { get; set; }
public Dictionary<string, string[]> Headers { get; set; }
public string HttpVerb { get; set; }
public string TransactionId { get; set; }
public int? HttpResponseStatusCode { get; set; }
}
公共类日志消息
{
公共日志消息()
{
CreatedDate=DateTime.UtcNow;
}
公共日志级别日志级别{get;set;}
公共字符串消息{get;set;}
public DateTime CreatedDate{get;private set;}
公共字符串AccessToken{get;set;}
public long?ParticipantId{get;set;}
公共字符串用户名{get;set;}
公共布尔值已验证{get;set;}
公共字符串Url{get;set;}
公共异常{get;set;}
公共字符串StackTrace{get;set;}
公共字符串详细信息{get;set;}
公共字符串ClientIpAddress{get;set;}
公共字符串入口应用程序{get;set;}
公共字符串身份验证方法{get;set;}
公共字符串AuthenticationClientId{get;set;}
公共字符串日志应用程序{get;set;}
[说明(“这是ClassName-MethodName的组合”)]
公共字符串MethodName{get;set;}
公共字典头{get;set;}
公共字符串HttpVerb{get;set;}
公共字符串TransactionId{get;set;}
公共int?HttpResponseStatusCode{get;set;}
}

如果您能帮助解决此问题,我们将不胜感激。要用Jil序列化异常对象,我需要做什么?

这里的基本问题是
系统。异常
不是要序列化的。它包含各种“只能在这台机器上工作”的信息

通常Jil会忽略很多,