【发布时间】:2016-04-07 04:13:26
【问题描述】:
public class MyClass
{
public object BidAutoObject { get; set; }
public bool IsApplied { get; set; }
}
我有一个像上面这样的类,我正在从上面的 Class 对象创建 Json 字符串。属性“BidAutoObject”属于“对象”类型。该对象可能是“CxDays”或“AMPM”。它是动态设置的。我正在使用 newtonsoft.JsonConvert.SerializeObject 将 C# 对象序列化为 Json 字符串。 Json 序列化的输出是这样的
"BidAutoObject": {
"IsSun": true,
"IsMon": false,
"IsTue": true,
"IsWed": true,
"IsThu": false,
"IsFri": true,
"IsSat": true
}
所以我无法从上面的json字符串中识别“BidAutoObject类型是“CxDays”还是“AMPM”。如何在序列化过程中添加类型信息。是否需要在“BidAutoObject”中添加任何属性?
public class CxDays
{
public bool IsSun { get; set; }
public bool IsMon { get; set; }
public bool IsTue { get; set; }
}
public class AMPM
{
public bool AM { get; set; }
public bool PM { get; set; }
public bool MIX { get; set; }
}
而不是 ""BidAutoObject": 在 Json 字符串中,我需要 json 字符串中的类对象名称,例如 "CxDays" 或 "AMPM"。我们有一个使用 "Jsonserializer setting" 的选项。当我们设置 TypeNameHandling = TypeNameHandling.Auto - 这将只为声明类型(即 Base)与实例类型(即 Derived)不匹配的实例添加 $type 属性。但它显示了该类的完整命名空间。现在我只想显示Json 字符串中的类名而不是全名空间。
【问题讨论】:
-
这看起来确实像 XY 问题。你想做什么?
-
如果您作为开发人员无法识别它是哪个具体对象,您如何期望 JSON.NET 等框架能够识别它?
-
但它显示了该类的完整命名空间——那么问题是什么?根据您的描述,听起来 Json.NET 正在成功地序列化和反序列化类型信息。
-
我已经更新了问题
标签: c# json serialization json.net