将以@符号开头的JSON属性反序列化为C#动态对象



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

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

我可以获得这样的id和文本属性。

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

由于您不能在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"];

假设您使用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);

相关内容

  • 没有找到相关文章

最新更新