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

C# 将对象的一部分序列化为json,c#,json,serialization,C#,Json,Serialization,我有一个C#中类似的类: 有办法吗?如果您使用的是JSON.Net,您可以添加一个方法: public bool ShouldSerializeMyObjectList() { return false; } 或者,您可以在不希望序列化的属性上方使用JsonIgnore,但这也会阻止它们被反序列化 编辑: JSON.Net自动查找带有签名的方法public bool ShouldSerializeProperty(),并将其用作是否应序列化特定属性的逻辑。以下是相关文件: 以下是一个

我有一个C#中类似的类:


有办法吗?

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

public bool ShouldSerializeMyObjectList()
{
    return false;
}
或者,您可以在不希望序列化的属性上方使用
JsonIgnore
,但这也会阻止它们被反序列化

编辑:

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

以下是一个例子:

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; }
}
static void Main(字符串[]args)
{
var thing=newmyclass
{
Id=“Id”,
Description=“Description”,
Location=“Location”,
myObjectList=新列表
{
新的MyObject{Name=“Name1”},
新MyObject{Name=“Name2”}
}
};
var json=JsonConvert.SerializeObject(thing);
Console.WriteLine(json);
Console.Read();
}
类MyClass
{
公共字符串Id{get;set;}
公共字符串说明{get;set;}
公共字符串位置{get;set;}
公共列表MyObjectLists{get;set;}
公共bool应该序列化myObjectList()
{
返回false;
}
}
类MyObject
{
公共字符串名称{get;set;}
}

JSON输出如下所示:
{“Id”:“Id”,“Description”:“Description”,“Location”:“Location”}

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

public bool ShouldSerializeMyObjectList()
{
    return false;
}
或者,您可以在不希望序列化的属性上方使用
JsonIgnore
,但这也会阻止它们被反序列化

编辑:

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

以下是一个例子:

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; }
}
static void Main(字符串[]args)
{
var thing=newmyclass
{
Id=“Id”,
Description=“Description”,
Location=“Location”,
myObjectList=新列表
{
新的MyObject{Name=“Name1”},
新MyObject{Name=“Name2”}
}
};
var json=JsonConvert.SerializeObject(thing);
Console.WriteLine(json);
Console.Read();
}
类MyClass
{
公共字符串Id{get;set;}
公共字符串说明{get;set;}
公共字符串位置{get;set;}
公共列表MyObjectLists{get;set;}
公共bool应该序列化myObjectList()
{
返回false;
}
}
类MyObject
{
公共字符串名称{get;set;}
}

JSON输出如下所示:
{“Id”:“Id”,“Description”:“Description”,“Location”:“Location”}
如果使用
Newtonsoft JSON.NET
,则可以将
[JsonIgnore]
属性应用于
myobjectlist
属性

公共类MyClass
{
公共字符串Id{get;set;}
公共字符串说明{get;set;}
公共字符串位置{get;set;}
[JsonIgnore]
公共列表MyObjectLists{get;set;}
}
更新#1

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

请参见此处的示例:


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

如果使用
Newtonsoft Json.NET
,则可以将
[JsonIgnore]
属性应用于
myobjectlist
属性

公共类MyClass
{
公共字符串Id{get;set;}
公共字符串说明{get;set;}
公共字符串位置{get;set;}
[JsonIgnore]
公共列表MyObjectLists{get;set;}
}
更新#1

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

请参见此处的示例:


您也可以使用@GBree12中的
ShouldSerialize
解决方案。

但是如何将该函数与序列化一起使用呢?我应该把它作为一个论据还是什么?你实际上不需要做任何事情。Json.Net会自动查找带有签名的方法,并在序列化时使用这些方法。我将为一个示例添加代码。但如何在序列化中使用该函数呢?我应该把它作为一个论据还是什么?你实际上不需要做任何事情。Json.Net会自动查找带有签名的方法,并在序列化时使用这些方法。我将为一个示例添加代码。