【问题标题】:DataMember attribute not affects on json resultDataMember 属性不影响 json 结果
【发布时间】:2015-04-02 10:09:52
【问题描述】:

我有这个带有 System.Runtime.Serialization 属性的模型:

[DataContract]
public class DataTableItemModel
{
    [DataMember(Name = "targets")]
    public int[] Targets { get; set; }
    [DataMember(Name = "visible")]
    public bool Visible { get; set; }
    [DataMember(Name = "searchable")]
    public bool Searchable { get; set; }
    [DataMember(Name = "name")]
    public string Field { get; set; }
}

然后在 Razor Model.DataTablesDescription 中(这是List<DataTableItemModel>):
@Html.Raw(new JavaScriptSerializer().Serialize(Model.DataTablesDescription))

@Html.Raw(Json.Encode(Model.DataTablesDescription))

输出 HTML 如下:
[{"Targets":[0],"Visible":false,"Searchable":false,"Field":"Id"}, ...]

但我期望:
[{"targets":[0],"visible":false,"searchable":false,"name":"Id"},
即受 DataMember 属性的约束。

怎么了?

【问题讨论】:

标签: c# .net json asp.net-mvc


【解决方案1】:

问题在于JavaScriptSerializer 不会考虑您的[DataMember]/[DataContract]

尝试使用DataContractJsonSerializer:

例如:

@{
var serializer = new DataContractJsonSerializer(typeof(DataTableItemModel));
var memoryStream = new MemoryStream();

serializer.WriteObject(memoryStream, Model.DataTablesDescription);

@Html.Raw(new StreamReader(memoryStream).ReadToEnd())
}

或者,改用Json.NET

@Html.Raw(JsonConvert.SerializeObject(Model.DataTablesDescription));

MSDN

【讨论】:

  • Json.NET 与 DataMember 属性完美配合。谢谢。
【解决方案2】:

你可以试试这个吗?

[DataContract]
public class DataTableItemModel
{
    [DataMember]
    [DisplayName("targets")]
    public int[] Targets { get; set; }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-19
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    • 2015-04-20
    • 1970-01-01
    • 2011-01-18
    相关资源
    最近更新 更多