我在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"
}
有办法吗?
答案 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"}