C# 仅针对特定属性的Newtonsoft Json序列化
我有两个类,它们之间有聚合关系C# 仅针对特定属性的Newtonsoft Json序列化,c#,json,json.net,C#,Json,Json.net,我有两个类,它们之间有聚合关系 公共类问题 { //--- //成吨的其他财产 //--- [JsonProperty(“密钥”)] 公共字符串密钥{get;set;} [JsonProperty(“字段”)] 公共字段{get;set;} } 公共类字段 { //--- //成吨的其他财产 //--- [JsonProperty(“customfield_10202”)] 公共对象Customfield10202{get;set;} } 当我将json序列化程序与契约解析器一起使用时,得到了
公共类问题
{
//---
//成吨的其他财产
//---
[JsonProperty(“密钥”)]
公共字符串密钥{get;set;}
[JsonProperty(“字段”)]
公共字段{get;set;}
}
公共类字段
{
//---
//成吨的其他财产
//---
[JsonProperty(“customfield_10202”)]
公共对象Customfield10202{get;set;}
}
当我将json序列化程序与契约解析器一起使用时,得到了如下json结果
{
“customfield_10202”:“值”
}
下面是联系人解析程序和序列化操作
string json=JsonConvert.SerializeObject(字段、格式、缩进、新JsonSerializerSettings{ContractResolver=new DynamicContractResolver(“customfield_10202”)});
公共类DynamicContractResolver:DefaultContractResolver
{
私有只读字符串_propertyName;
公共DynamicContractResolver(字符串属性名称)
{
_propertyName=propertyName;
}
受保护的重写IList CreateProperties(类型类型,MemberSerialization MemberSerialization)
{
IList properties=base.CreateProperties(类型、成员序列化);
properties=properties.Where(p=>p.PropertyName==\u PropertyName?true:false).ToList();
归还财产;
}
}
但我期望json的结果是这样的
{
“字段”:{
“customfield_10202”:“值”
}
}
我可以用简单的方法解决这个问题,但似乎不对。如果不使用字符串变量,如何获取我提到的json的结果
string json_data=“{\”字段\:“+json+”}”;
假设您有以下问题
实例:
var问题=新问题
{
Key=“1”,
字段=新字段
{
Customfield10202=“值”
}
};
为了能够序列化
问题中的
,以及字段
类中的Fields
customfield_10202
字符串
,而应该预期字符串
的集合:
公共类DynamicContractResolver:DefaultContractResolver
{
私有只读字符串[]\u属性;
公共DynamicContractResolver(字符串[]属性)
{
_属性=属性;
}
受保护的重写IList CreateProperties(类型类型,MemberSerialization MemberSerialization)
{
IList properties=base.CreateProperties(类型、成员序列化);
返回properties.Where(p=>_properties.Contains(p.PropertyName)).ToList();
}
}
用法将按如下方式更改:
var properties=new[]{“fields”,“customfield_10202”};
字符串json=JsonConvert.SerializeObject(问题、格式、缩进、新JsonSerializerSettings{ContractResolver=new DynamicContractResolver(属性)});
生成的输出将符合要求:
{
“字段”:{
“customfield_10202”:“值”
}
}
您是否尝试过properties=properties.Where(p=>p.PropertyName==\u PropertyName | | p.PropertyName==“字段”?true:false)。ToList()
?@EMRETUNA是否也可以与我们共享字段
变量赋值?是否将字段
类实例传递给序列化对象
?感谢您的回答和编辑