2015-11-07 54 views
3

有人做出了非常糟糕的设计决策,并且可以为我提供具有“特殊”结构的JSON。要simplfy问题:Json.NET中的替代字段类型

{ 
    "messed-up": "string" 
} 

{ 
    "messed-up": { "nested": "value" } 
} 

基本上是一个字段(非常深深藏在我的情况),可以是一个字符串或更复杂的对象。我需要建立这样一个阶级结构,让我到:

  • 进行序列化/反序列化
  • 生成模式

因此,我需要这样的:

public class NotFunny 
{ 
    [JsonProperty("messed-up", NullValueHandling = NullValueHandling.Ignore)] 
    public string messedUp; 

    [JsonProperty("messed-up", NullValueHandling = NullValueHandling.Ignore)] 
    public Alternative messedUpAlternative; 
} 

public class Alternative 
{ 
    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] 
    public string nested; 
} 

但是,由于显而易见的原因,这是行不通的。我的问题是:如何处理这个悲惨的情况?

任何帮助非常感谢!

回答

3

您可以尝试使用dynamic类型来达到此目的。

Sample

我与Newtonsoft.Json样品:

using Newtonsoft.Json.Linq; 

dynamic data1 = JObject.Parse(str1); 

if (data1.messed_up is JValue) 
    Console.WriteLine(data1.messed_up); 

if (data1.messed_up is JObject) 
    Console.WriteLine(data1.messed_up.nested); 
+0

我也认为它可能工作,遗憾的是它不与架构工作。它说“无效的类型,预期的对象,空,但得到了字符串”。 –

+1

我会在几分钟内添加一个样本。希望它可以帮助 –