将对象的一部分序列化为json

时间:2017-09-26 22:04:58

标签: c# json serialization

我在C#中有一个类似这样的类:

public class MyClass
{
    public string Id { get; set; }
    public string Description { get; set; }
    public string Location { get; set; }
    public List<MyObject> MyObjectLists { get; set; }
}

我只想序列化到该对象的JSON 部分:只需 ID 说明位置属性,以便生成的JSON看起来像这样:

{
    "Id": "theID",
    "Description": "the description",
    "Location": "the location"
}

有办法吗?

2 个答案:

答案 0 :(得分:3)

如果您使用Newtonsoft Json.NET,则可以将[JsonIgnore]属性应用于MyObjectLists媒体资源。

public class MyClass
{
    public string Id { get; set; }
    public string Description { get; set; }
    public string Location { get; set; }

    [JsonIgnore]
    public List<MyObject> MyObjectLists { get; set; }
}

更新#1

是的,您可以避免[JsonIgnore]属性。您可以编写自定义JsonConverter

请参阅此处的示例:Custom JsonConverter

您还可以使用@ GBreen12中的ShouldSerialize解决方案。

答案 1 :(得分:2)

如果您使用的是JSON.Net,则可以添加方法:

public bool ShouldSerializeMyObjectList()
{
    return false;
}

或者,您可以在不希望序列化的属性上方使用JsonIgnore,但这也会阻止它们反序列化。

编辑:

JSON.Net自动查找带有签名public bool ShouldSerializeProperty()的方法,并将其用作是否应序列化特定属性的逻辑。以下是文档:

https://www.newtonsoft.com/json/help/html/ConditionalProperties.htm

以下是一个例子:

static void Main(string[] args)
{
    var thing = new MyClass
    {
        Id = "ID",
        Description = "Description",
        Location = "Location",
        MyObjectLists = new List<MyObject>
        {
            new MyObject { Name = "Name1" },
            new MyObject { Name = "Name2" }
        }
    };

    var json = JsonConvert.SerializeObject(thing);
    Console.WriteLine(json);
    Console.Read();
}

class MyClass
{
    public string Id { get; set; }
    public string Description { get; set; }
    public string Location { get; set; }
    public List<MyObject> MyObjectLists { get; set; }

    public bool ShouldSerializeMyObjectLists()
    {
        return false;
    }
}

class MyObject
{
    public string Name { get; set; }
}

JSON输出如下所示:{"Id":"ID","Description":"Description","Location":"Location"}