使用JSON.NET序列化公共属性

时间:2011-12-19 13:31:24

标签: c# wcf json serialization json.net

我正在使用JSON.NET实现将.NET对象序列化/反序列化为JS,反之亦然,所有工作正常,直到在下面运行GetWCFData()

using Newtonsoft.Json;
using Newtonsoft.Json.Converters;

    public class WebLookup
    {
        WCFService.WCFServiceClient svc;
        IsoDateTimeConverter DateConverter = new IsoDateTimeConverter();


        List<WCFContract.Language> Languages { get; set; }
        List<WCFContract.Group> Groups { get; set; }
        List<WCFContract.User> Users { get; set; }

        public WebLookup()
        {
            DateConverter.DateTimeFormat = "dd/MM/yyyy";
            DateConverter.DateTimeStyles = System.Globalization.DateTimeStyles.AssumeLocal;
        }

        public string GetWCFData()
        {
            svc = new WCFService.WCFServiceClient();
            WebLookup weblookup = new WebLookup();
            weblookup.Languages = svc.GetWCFLanguages().ToList();
            weblookup.Groups = svc.GetWCFGroups().ToList();
            weblookup.Users = svc.GetWCFUsers().ToList();

            return JsonConvert.SerializeObject(weblookup, DateConverter);
        } 

    }

成员LanguagesGroupsUsers在调用WCF服务时成功填充,但 JsonConvert.SerializeObject(lookup, DateConverter)总是向客户端(Web浏览器)返回一个空的JSON字符串,这很奇怪,因为它在其他方面通常对我很好,唯一的区别是这里我已经声明了填充的WebLookup成员作为班级本身的公共财产。

1 个答案:

答案 0 :(得分:5)

语言,组和用户属性需要声明为公共成员才能通过JSON.NET或内置JavaScriptSerializer进行序列化,但代码中并非如此。