![](/img/trans.png)
[英]How to serialize class type but not the namespace to a Json string using DataContractJsonSerializer
[英]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.