簡體   English   中英

如何使用 DataContractJsonSerializer 序列化包含日期和時間屬性的 JSON 字符串?

[英]How to serialize JSON string containing date and time property using DataContractJsonSerializer?

我們正在嘗試將 JSON object [作為字符串] 序列化為自定義 class。 雖然我們寧願不使用任何第三方包,例如 Newtonsoft.Json 或 Json.NET,但我們嘗試使用DataContractJsonSerializer JSON object 包含在“yyyy-MM-dd HH:mm:ss”中提供的 DateTime 屬性,當涉及到序列化時,會引發以下期望。

根據 JSON 的要求,反序列化 DateTime 類型的 object 內容“2020-05-29 09:05:39”不以“\/Date(”開頭並以“)\/”結尾時出錯

重要提示:該問題將通過 NewtonSoft package 並將 JsonSerializerSettings 添加到 JsonConvert.DeserializeObject 來解決。 由於最終產品是 COM Object,因此我們的最終目標 dll 必須沒有依賴的 DLL。

您可以在下面找到技術細節:

JSON object 是:

{
  ...,
  "export_time": "2020-05-29 09:05:39",
  "app_version": "1.1.0",
  "allowed_mac_addresses": [
    "XX-XX-XX-XX-XX-XX"
  ],
  "signature": ""
}

目標 class:

[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 克隆/下載 package(即 Newtonsoft.JSON)直接添加到您的項目中。 這樣您的部署(bin 文件夾)就不會有任何第三方 dll。

請注意,最新版本的 Newtonsoft.JSON 在 .netcore 中實現,當您的項目在 .net 框架 4 上時,您必須下載兼容版本。 您可以使用標簽找到要下載的最佳版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM