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

标签 c# json .net-4.0 datetime-format datacontractjsonserializer

我们正在尝试将 JSON 对象[作为字符串]序列化为自定义类。虽然我们不想使用任何第三方包,例如 Newtonsoft.Json 或 Json.NET,但我们尝试使用 DataContractJsonSerializer。 JSON 对象包含“yyyy-MM-dd HH:mm:ss”中提供的 DateTime 属性,并且在序列化时会引发以下期望。

There was an error deserializing the object of type DateTime content '2020-05-29 09:05:39' does not start with '\/Date(' and end with ')\/' as required for JSON

重要:该问题将通过 NewtonSoft 包并将 JsonSerializerSettings 添加到 JsonConvert.DeserializeObject 来解决。由于最终产品是 COM 对象,因此我们最终的目标 dll 必须没有依赖的 DLL。

您可以在下面找到技术详细信息:

JSON 对象是:

{
  ...,
  "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:社区中还有一些其他建议,例如 this解决方案,但他们要求引用其他包。

尝试 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 上时,您必须下载兼容版本。您可以使用标签找到要下载的最佳版本。

关于c# - 如何使用 DataContractJsonSerializer 序列化包含日期和时间属性的 JSON 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62141515/

相关文章:

c# - 处理将操作参数绑定(bind)到不正确类型的路由值的错误

c# - 软件开发人员不将授权外部化是否有原因?

c# - 处理 JSON.net 中的引用循环

.net - 如何在构建后事件中获取版本号

c# - WCF messageheader 与 messagebodymember?

c# - 具有未知 UserControl 的 MVVM 显示 OberservableCollection<ViewModel>

c# - 单击控件外部时如何关闭 Silverlight 中的弹出窗口?

javascript - 下载文件时在文件内容中获取类型 [object object],而不是使用 angular 7 的 blob

java - 在 Android 中使用 MySql 项目将 JSON 转换为字符串

c# - 代码分析警告CA1506 : "Avoid excessive class coupling"如何解决