Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 仅针对特定属性的Newtonsoft Json序列化_C#_Json_Json.net - Fatal编程技术网

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
您需要将两个名称都传递给冲突解决程序

因此,您不应该在ctor中接收单个
字符串
,而应该预期
字符串
的集合:

公共类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是否也可以与我们共享
字段
变量赋值?是否将
字段
类实例传递给
序列化对象
?感谢您的回答和编辑