Json.NET能否反序列化“动态”属性?

6
我的 C# 服务正在接收来自外部服务的对象,其格式有些 "模糊",看起来像这样:

{
  "member": {
      "<dynamicProperty>": {
          "value":"some_string",
          "score": 10
      }
}

这个属性 "" 可以针对每个对象进行更改,我没有定义和限制其可能值的列表,当然我也不能更改此格式。

有人知道 Json.NET 或其他 Json .NET 序列化程序是否可以帮助我并允许我定义像下面的 MemberDynamicProperty 类,以便我能够轻松反序列化吗?

class Member
{
    [JsonProperty(PropertyName= "??")] // what should I put here?
    public DynamicProperty { get; set; }
}

class DynamicProperty
{
    public string value;
    public int score;
}

谢谢


字典可行吗?member还有其他属性吗? - Tim S.
成员有其他属性,但都比较简单(我指的是它们不会改变),所以使用字典就可以了!我之前没有想到,但这真的很容易! - pierroz
2个回答

7
你可以使用一个Dictionary<string, object>
class Member
{
     public Dictionary<string, object> { get; set; }
}

或者,您可以使用JsonExtensionData属性:

class Member
{
     [JsonExtensionData]
     public Dictionary<string, JToken> { get; set; }
}

我甚至要使用Dictionary<string, FuzzyProperty>(我应该找一个更好的名称) - pierroz
但是FuzzyProperty包含两个成员,这意味着其中一个始终包含空值。 - Yuval Itzchakov
真的吗?他将无法将字典值反序列化为 DynamicProperty 类的实例(我已将 FuzzyProperty 重命名为 DynamicProperty)。 - pierroz

0
我是这样做的。像这样把数据放进去:
var data1 = JsonConvert.DeserializeObject<JSONX>(readJSON); 

这是Yuval上面例子中的类:
class recordxy
{
[JsonExtensionData]
public Dictionary<string, object> DataItems { get; set; }
}

像这样提取键和值:
foreach (var item in data1...DataItems)
{
Console.WriteLine(item.Key);
Console.WriteLine(item.Value);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接