【问题标题】:c# JSON SerializeObject with Custom Listc# JSON SerializeObject 与自定义列表
【发布时间】:2015-10-21 08:15:13
【问题描述】:

我有一个这样的 JSON 对象:

    public class RootObject
{
    public string Number { get; set; }
    public string ChannelType { get; set; }
    public string ServiceName { get; set; }
    public List<ImageInfos> ImageInfos { get; set; }
    public bool IsInMixedFolder { get; set; }
    public string Name { get; set; }
    public string Id { get; set; }
    public string DateCreated { get; set; }
    public string DateModified { get; set; }
    public string DateLastSaved { get; set; }
    public List<object> LockedFields { get; set; }
    public string ParentId { get; set; }
    public List<string> Studios { get; set; }
    public List<string> Genres { get; set; }
    public ProviderIds ProviderIds { get; set; }
}

像这样的 ImageInfos:

    public class ImageInfos
{
    private string Path;
    private string Type;
    private string DateModified;

    public ImageInfos(string Path, string Type, string DateModified)
    {
        this.Path = Path;
        this.Type = Type;
        this.DateModified = DateModified;
    }

我正在尝试用值填充 json ImageInfos-List 并将其序列化为新字符串:

            jsonObject = JsonConvert.DeserializeObject<RootObject>(json);

            List<ImageInfos> newInfos = new List<ImageInfos>();
            newInfos.Add(new ImageInfos("Test", "Test", "Test"));
            jsonObject.ImageInfos = newInfos;
            string newJSON = JsonConvert.SerializeObject(jsonObject);

但是新的 json 看起来是这样的:

"{\"Number\":\"35\",\"ChannelType\":\"TV\",\"ServiceName\":\"DVBLink\",\"ImageInfos\":[{} ],\"IsInMixedFolder\":false,\"Name\":\"13th Street HD\",\"Id\":\"466ab1fb9be4f77e65ad2b229a15c326\",\"DateCreated\":\"2015-09-14T12: 55:51.4081476Z\",\"DateModified\":\"0001-01-01T00:00:00.0000000Z\",\"DateLastSaved\":\"2015-10-17T13:34:37.4214116Z\",\ "LockedFields\":[],\"ParentId\":\"00000000000000000000000000000000\",\"Studios\":[],\"Genres\":[],\"ProviderIds\":{\"ProviderExternalId\" :\"13250000\"}}"

为什么新 JSON 字符串中的 ImageInfos 为空?

【问题讨论】:

  • ImageInfos 的所有属性都是私有的。 Json.NET 默认不会序列化它们。要强制它序列化私有属性,请将[JsonProperty] 属性添加到每个属性。

标签: c# json list


【解决方案1】:

ImageInfos 的所有属性都是私有的。默认情况下,Json.NET 不会序列化它们,因此生成的 JSON 显示一个空对象。

要强制 Json.NET 序列化私有属性,请为每个属性添加 [JsonProperty] 属性:

public class ImageInfos
{
    [JsonProperty]
    private string Path;
    [JsonProperty]
    private string Type;
    [JsonProperty]
    private string DateModified;

    public ImageInfos(string Path, string Type, string DateModified)
    {
        this.Path = Path;
        this.Type = Type;
        this.DateModified = DateModified;
    }
}

(或者,将它们公开)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多