【问题标题】:Include class Name in WCF Json Serialization在 WCF Json 序列化中包含类名称
【发布时间】:2012-04-26 11:21:27
【问题描述】:

这一定是微不足道的,但我似乎无法完成它。给定以下数据协定类:

public class SampleItem
{
    public int Id { get; set; }
    public string StringValue { get; set; }
}

当我的 WCF 服务反序列化为 JSON 时,提供以下输出:

[{"Id":1,"StringValue":"Hello"}]

有没有办法也包含类名?即:

"SampleItem": [{"Id":1,"StringValue":"Hello"}]

【问题讨论】:

    标签: c# json wcf serialization


    【解决方案1】:

    你可以试试这样的:

    private dynamic AddClassName(SampleItem item)
    {
          return new {SampleItem = item};
    }
    

    var item = new SampleItem {Id = 1, StringValue = "Hello"};
    dynamic itemClassName = AppendClassName(item);
    string json = new JavaScriptSerializer().Serialize(itemClassName);
    Debug.WriteLine(json);
    

    编辑 - 这适用于所有类型:

    private static string GetJsonWrapper<T>(T item)
    {
        string typeName = typeof(T).Name;
        string jsonOriginal = new JavaScriptSerializer().Serialize(item);
        return string.Format("{{\"{0}\":{1}}}", typeName, jsonOriginal);
    }
    

    【讨论】:

    • 酷!这行得通。但这意味着我将不得不从我的服务返回动态类型,而不是“SampleItem”。还有其他方法吗?
    • 看来你得使用自己的序列化器了,看看这篇博文:danrigsby.com/blog/index.php/2008/03/07/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-24
    • 1970-01-01
    • 2012-09-27
    • 1970-01-01
    相关资源
    最近更新 更多