我们正试图将一个JSON对象[作为一个字符串]序列化到一个自定义类中。虽然我们不想使用任何第三方包,如Newtonsoft.Json或Json.NET,但我们试图利用 DataContractJsonSerializer. JSON对象包含一个以 "yyyy-MM-dd HH:mm:ss "提供的DateTime属性,当涉及到序列化时,会抛出下面的期望。
在反序列化类型DateTime内容'2020-05-29 09:05:39'的对象时,出现了一个错误,没有按照JSON的要求以'/Date('开始,以')/'结束。
重要的是,这个问题将通过NewtonSoft包和在JsonConvert.DeserializeObject中添加JsonSerializerSettings来解决。 这个问题将通过NewtonSoft包和在JsonConvert.DeserializeObject中添加JsonSerializerSettings来解决。由于最终产品是一个COM对象,我们的最终目标dll必须没有依赖的DLL。
你可以在下面找到技术细节。
JSON对象是.COM对象。
{
...,
"export_time": "2020-05-29 09:05:39",
"app_version": "1.1.0",
"allowed_mac_addresses": [
"XX-XX-XX-XX-XX-XX"
],
"signature": ""
}
目标类。
[DataContract]
public class MainFractionatorConfigFile
{
[DataMember]
internal string[] allowed_mac_addresses;
[DataMember]
internal DateTime export_time;
[DataMember]
internal string app_version;
[DataMember]
internal string signature;
}
而序列化器方法是 。
public static MainFractionatorConfigFile ReadMainFractionatorConfigFile(string json)
{
var deserializedUser = new MainFractionatorConfigFile();
var ms = new MemoryStream(Encoding.UTF8.GetBytes(json));
var ser = new DataContractJsonSerializer(deserializedUser.GetType());
deserializedUser = ser.ReadObject(ms) as MainFractionatorConfigFile;
ms.Close();
return deserializedUser;
}
尝试1。 社区里还有一些其他的建议,比如: 这个 解决方案,但他们要求引用其他包。
尝试2 试图将DateTimeDataContractSurrogate添加到DataContractJsonSerializer中,但也不成功。
综上所述,我们正在为下面的代码寻找一种替代方法。
var mainFObj = JsonConvert.DeserializeObject<MainFractionatorConfigFile>(myJson, new JsonSerializerSettings
{
DateFormatHandling = DateFormatHandling.MicrosoftDateFormat
});
任何帮助或想法将被感激。
在有关于添加第三方NuGet包的约束的情况下,为什么不尝试从Github克隆下载包(即Newtonsoft.Json),并直接将它们添加到你的项目中。这样你就不会有任何第三方的dll在你的部署中(bin文件夹)。
请注意,最新版本的Newtonsoft.JSON是在.netcore中实现的,当你的项目是在.net framework 4上时,你必须下载兼容版本。你可以使用标签来寻找最佳的下载版本。