如何使用DataContractJsonSerializer序列化包含日期和时间属性的JSON字符串?

问题描述 投票:1回答:1

我们正试图将一个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
                });

任何帮助或想法将被感激。

c# json .net-4.0 datetime-format datacontractjsonserializer
1个回答
1
投票

在有关于添加第三方NuGet包的约束的情况下,为什么不尝试从Github克隆下载包(即Newtonsoft.Json),并直接将它们添加到你的项目中。这样你就不会有任何第三方的dll在你的部署中(bin文件夹)。

请注意,最新版本的Newtonsoft.JSON是在.netcore中实现的,当你的项目是在.net framework 4上时,你必须下载兼容版本。你可以使用标签来寻找最佳的下载版本。

© www.soinside.com 2019 - 2024. All rights reserved.