JsonConvert 使我的 Windows 服务失败
JsonConvert makes my Windows Service fail
也许这是一个愚蠢的问题,但我从今天早上就开始面对它了。
我正在用 C# 编写 windows 服务。在超时事件处理程序中,我向 Web API 发出请求 returns me a Json,如下所示:
void OnTimerElapsed(object sender, ElapsedEventArgs e)
{
List<Anomalia> anomalie = null;
TimeIntervalConfigurationModel timeConf = new XmlConfigurationReader.XmlConfigurationHelper().GetTimeIntervalConfiguration();
if (CanNotify(timeConf))
{
try
{
//ricerca anomalie
eventLog.WriteEntry("Contact service: ricerca anomalie....");
WebRequest requestUrl = WebRequest.Create(urlConfig.BaseUrl + urlConfig.Anomalia);
Stream objStream = requestUrl.GetResponse().GetResponseStream();
StreamReader objReader = new StreamReader(objStream);
String sLine = "";
sLine = objReader.ReadToEnd();
anomalie = JsonConvert.DeserializeObject<List<Anomalia>>(sLine);
//cut
}
catch (Exception ex)
{
//cut
}
}
}
现在我面临一个非常奇怪的行为:如果我保留 JsonConvert.DeserializeObject>(sLine);指令处理程序方法不执行,如果我删除它,方法将正常触发。此问题不是由于数据格式引起的:如果我尝试反序列化空字符串或空 json 数组,该方法不会执行。
刚刚找到解决方案。
问题是我从 Solution->Manage Nuget Packages from solution 安装了 Nuget 包。
在此之前,包是直接通过 Nuget 安装的。
打开项目的 packages.config 文件,我发现了这一行:
<package id="Newtonsoft.Json" version="4.5.11" targetFramework="net40-Client" />
删除它并通过 Nuget 重新安装包后,我在 packages.config
中找到了这一行
<package id="Newtonsoft.Json" version="7.0.1" targetFramework="net40-Client" />
很明显,问题是版本号错误。阅读此答案后我找到了解决方案:
也许这是一个愚蠢的问题,但我从今天早上就开始面对它了。 我正在用 C# 编写 windows 服务。在超时事件处理程序中,我向 Web API 发出请求 returns me a Json,如下所示:
void OnTimerElapsed(object sender, ElapsedEventArgs e)
{
List<Anomalia> anomalie = null;
TimeIntervalConfigurationModel timeConf = new XmlConfigurationReader.XmlConfigurationHelper().GetTimeIntervalConfiguration();
if (CanNotify(timeConf))
{
try
{
//ricerca anomalie
eventLog.WriteEntry("Contact service: ricerca anomalie....");
WebRequest requestUrl = WebRequest.Create(urlConfig.BaseUrl + urlConfig.Anomalia);
Stream objStream = requestUrl.GetResponse().GetResponseStream();
StreamReader objReader = new StreamReader(objStream);
String sLine = "";
sLine = objReader.ReadToEnd();
anomalie = JsonConvert.DeserializeObject<List<Anomalia>>(sLine);
//cut
}
catch (Exception ex)
{
//cut
}
}
}
现在我面临一个非常奇怪的行为:如果我保留 JsonConvert.DeserializeObject>(sLine);指令处理程序方法不执行,如果我删除它,方法将正常触发。此问题不是由于数据格式引起的:如果我尝试反序列化空字符串或空 json 数组,该方法不会执行。
刚刚找到解决方案。 问题是我从 Solution->Manage Nuget Packages from solution 安装了 Nuget 包。 在此之前,包是直接通过 Nuget 安装的。 打开项目的 packages.config 文件,我发现了这一行:
<package id="Newtonsoft.Json" version="4.5.11" targetFramework="net40-Client" />
删除它并通过 Nuget 重新安装包后,我在 packages.config
中找到了这一行<package id="Newtonsoft.Json" version="7.0.1" targetFramework="net40-Client" />
很明显,问题是版本号错误。阅读此答案后我找到了解决方案: