【问题标题】:Name attribute does nothing? JSON Serialize名称属性什么都不做? JSON序列化
【发布时间】:2013-10-11 21:40:30
【问题描述】:

我有一个准备序列化 JSON 对象的类,我的 REST API 返回一个名为“api_key”的值,但我希望我的属性名为“ApiKey”,然后我编写了以下代码:

    [DataContract]
    class JsonToken
    {

        [DataMember(Name = "api_key")]
        public string ApiKey { get; set; }

    }

我认为“名称”值会映射值,但不会发生。 然后我把我的代码改成这样,现在它可以工作了。

    [DataContract]
    class JsonToken
    {

        [DataMember]
        public string api_key{ get; set; }

    }

但是我仍然想要我的属性名为“ApiKey”,那么,我有两个问题:

1ª 如何将我的属性命名为“ApiKey”(并且可以使用)?

2ª Name 属性的作用是什么,如果它不是映射值?

提前致谢。

【问题讨论】:

  • 您使用的是哪种 ASP.NET 项目?这是一个 MVC 项目吗?或者它是一个标准的 Web 服务?

标签: c# json mapping


【解决方案1】:

您可以使用System.Runtime.Serialization.Json.DataContractJsonSerializer 类进行序列化 - 您可能需要添加对System.Runtime.Serialization 的引用。

JsonToken token = new JsonToken() { ApiKey = "Gunk" };

DataContractJsonSerializer jsx = new DataContractJsonSerializer(typeof(JsonToken));
string json = "";
using (MemoryStream ms = new MemoryStream())
{
    jsx.WriteObject(ms, token);
    json = Encoding.UTF8.GetString(ms.ToArray());
}

Console.WriteLine(json);

没有直接的字符串序列化选项,因此您必须将其包装在内存流周围。上面的代码应该给

{"api_key":"Gunk"}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 2021-07-22
    • 2012-01-23
    • 2013-10-09
    • 1970-01-01
    相关资源
    最近更新 更多