【问题标题】:Deserialize JSON property starting with @ symbol into C# dynamic object?将以@符号开头的JSON属性反序列化为C#动态对象?
【发布时间】:2016-08-20 23:45:26
【问题描述】:

如果Json属性以@符号开头,如何将其反序列化为动态对象。

{
    "@size": "13",
    "text": "some text",
    "Id": 483606
}

我可以像这样获取 id 和 text 属性。

dynamic json = JObject.Parse(txt);
string x = json.text;

【问题讨论】:

  • 你应该展示你到目前为止所尝试的。
  • 您希望它如何映射?

标签: c# json.net


【解决方案1】:

由于您不能在 C# 标记名称中使用 @,因此您需要将 @size 映射到其他内容,例如“SizeString”(因为它是上述 JSON 中的字符串)。我使用 WCF 数据协定属性,但您可以使用等效的 JSON 属性

...
[DataMember(Name = "@size")]
public string SizeString { get; set; }
...

这里是一个如何反序列化 Json 字符串的例子。也许你可以适应你的情况,或者澄清你的问题。

...
string j = @"{
            ""@size"": ""13"",
            ""text"": ""some text"",
            ""Id"": 483606
        }";
        MyClass mc = Newtonsoft.Json.JsonConvert.DeserializeObject<MyClass>(j);
...

[DataContract]
public class MyClass
{
    [DataMember(Name="@size")]
    public string SizeString { get; set; }
    [DataMember()]
    public string text { get; set; }
    [DataMember()]
    public int Id { get; set; }
}

如果您不打算将 Json 加载到预定义的类中,您可以执行以下操作...

var o = JObject.Parse(j);
var x = o["text"];
var size = o["@size"];

【讨论】:

    【解决方案2】:

    假设您使用 Json.NET:

    public class MyObject
    {
        [JsonProperty("@size")]
        public string size { get; set; }
    
        public string text { get; set; }
    
        public int Id { get; set; }
    }
    
    var result = JsonConvert.DeserializeObject<MyObject>(json);
    

    【讨论】:

      猜你喜欢
      • 2017-08-27
      • 1970-01-01
      • 2021-11-14
      • 2011-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多