我正在嘗試生成將在Dojo javascript框架內使用的JSON文件,並且想要返回要在dojo.place()
中使用的position
屬性呼叫。 position
參數可以是或者的一個數字或字符串。如何使用Json.NET序列化C#中的「union-like」字段
使用StructLayout
似乎不工作,因爲串行器會嘗試發出字符串和整數類型。我正在創建一個自定義ContractResolver
,它將覆蓋CreatePrimitiveContract
以返回自定義類JsonConverter
。但是,查看API時,看起來JsonConverter
是基於類型創建的,而不是特定的對象值。
如何在C#中使用Json.NET序列化程序處理這種情況?
假設解決方案將涉及兩個屬性與自定義設置器,以清空其他屬性,當一個設置與某種自定義Json.Net類聯合檢查屬性的值,並只序列化非空值。
**假設的例子**
// C# struct (or class)
[StructLayout(LayoutKind.Explicit)]
struct DojoPosition {
[JsonProperty(PropertyName="position")]
[FieldOffset(0)]
public String StrPos;
[JsonProperty(PropertyName="position")]
[FieldOffset(0)]
public Int32 IntPos;
}
// Serialization output
DojoPosition pos;
pos.StrPos = "only";
var output = JsonConvert.SerializeObject(pos);
// Output is: { "position": "only" }
pos.IntPos = 3;
var output = JsonConvert.SerializeObject(pos);
// Output is: { "position": 3 }
完美!我錯過了通過CreateContract方法的連接。這讓我走上了正軌。 – Lucas
Json.Net已被記錄,但入口點很難找到... – sanosdole