我想每秒序列化我的模型并将其推送到服务器。我已经设置了每秒执行一次的定期任务。我调用SendNewMessage来执行推送。 从构造函数调用的第一个方法调用SendNewMessage()运行良好,没有任何例外或问题。在WPF应用程序中使用NewtonSoft序列化模型
当异步任务尝试调用SendNewMessage时,出现异常,我的应用程序关闭。它是NewtonSoft代码:
String PushModelToServer = JsonConvert.SerializeObject(this,jss);从而未能
托管调试助手 'FatalExecutionEngineError' 已检测到问题的 “C:\用户\ snovva \来源\工作区\ HMI \ HMI.ViSoft \ BIN \ 86 \调试\ HMI.ViSoft.vshost。可执行程序'。 附加信息:运行时遇到致命错误。错误的地址是0x71041771,线程0x2788。错误代码是0xc0000005。此错误可能是CLR中的错误,也可能是用户代码中不安全或不可验证的部分。此错误的常见来源包括COM-interop或PInvoke的用户编组错误,这可能会破坏堆栈。
public class Model : ModelBase
{
public Model()
{
PeriodicTask.Run(() =>
{
SendNewMessage();
},
TimeSpan.FromSeconds(1));
SendNewMessage();
}
public void SendNewMessage()
{
// Send the message
JsonSerializerSettings jss = new JsonSerializerSettings();
jss.Formatting = Newtonsoft.Json.Formatting.Indented;
String PushModelToServer = JsonConvert.SerializeObject(this, jss);
sendMessage(System.Text.Encoding.Unicode.GetBytes(PushModelToServer));
}
}
public class PeriodicTask
{
public static async Task Run(Action action, TimeSpan period, CancellationToken cancellationToken)
{
while (!cancellationToken.IsCancellationRequested)
{
await Task.Delay(period, cancellationToken);
if (!cancellationToken.IsCancellationRequested)
action();
}
}
public static Task Run(Action action, TimeSpan period)
{
return Run(action, period, CancellationToken.None);
}
}
更多信息按照要求: 构造函数内运行线10的电话。序列化是第一次。由于模型中的数据正在改变,我每秒都会推动这个模型来更新服务器。这是失败的异步调用。随着时间的推移,模型中的数据将发生变化。
那么一定要有你想要序列化的类,这会使序列化程序变得疯狂。 – Marty
我相信OP说这个呼叫(在线10)有效,但是在lambda内线7上的呼叫没有。如果该类用正确的属性修饰,它应该可以正常工作。也许OP可以澄清这个例子,以显示哪个调用与评论一起工作,并且可以用更多细节来扩展该问题。 –
@KoryGill你是对的。我应该“装饰”哪些属性?我以前没有这样做过。我只想要基本上是字符串,浮动和布尔基本类型的公共属性。 – Snovva1