C# JsonDocument可以用作合同解析程序吗?
我对新发布的.NET Core 3.0及其新的C# JsonDocument可以用作合同解析程序吗?,c#,json,json.net,.net-core-3.0,system.text.json,C#,Json,Json.net,.net Core 3.0,System.text.json,我对新发布的.NET Core 3.0及其新的System.Text.Json有一个问题,我想问一下新的JsonDocument是否可以类似于Newtonsoft Json.NET中的ContractResolver类 我需要的是非常简单的,假设一个类有两个属性 public string Name {get; set;} public string Street {get; set;} 我不确定我是否理解这个问题,你是在问a是否可以用作a吗?这对我来说毫无意义,因为契约解析器不是一个JSON文
System.Text.Json
有一个问题,我想问一下新的JsonDocument
是否可以类似于Newtonsoft Json.NET中的ContractResolver
类
我需要的是非常简单的,假设一个类有两个属性
public string Name {get; set;}
public string Street {get; set;}
我不确定我是否理解这个问题,你是在问a是否可以用作a吗?这对我来说毫无意义,因为契约解析器不是一个JSON文档,它是一组如何将JSON映射到.Net对象的规则。或者你在问,在
System.Text.JSON
命名空间中是否有一个与自定义IContractResolver
等价的类?另外,你能否澄清一下你的“一个类”对应于整个JSON或仅对应于“person\u A”
、“person\u B”
、“man\u A”
和“woman\u B”
的值。如果您正在System.Text.JSON
中寻找与自定义契约解析程序等效的内容,则当前似乎没有公开任何内容。如果你能请你澄清你的问题,我可以解释,并给出一些解决方案。谢谢你的评论,我编辑了这个问题,希望它有助于澄清我试图做什么。
{"person_A":{"full-name":"Micheal","address-street":"1st avenue","address-city":"New York"},
"person_B":{"full-name":"John","address-street":"Green street","address-city":"London"}}
{"man_A":{"fullname":"Bush","street":"1st avenue","city":"Washington","state":"US"},
"woman_B":{"fullname":"McCarter","street":"Green street","city":"London","state":"GB"}}
private void AddMap<U>(Expression<Func<Instrument,U>> expression, string jsonPropertyName)
{
var memberExpression = (MemberExpression)expression.Body;
propertyMappings.Add(memberExpression.Member.Name, jsonPropertyName);
}
public override async Task<List<Person>> GetPeopleAsync(HttpRequestMessage request)
{
AddMap(x => x.Name, "full-name");
AddMap(x => x.Street, "address-street");
var result = new List<Person>();
var response = await SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
var stream = await response.Content.ReadAsStreamAsync();
var document = await JsonDocument.ParseAsync(stream);
document.RootElement.GetProperty("people").EnumerateObject()
.ToList()
.ForEach(x =>
{
var person= new Person();
foreach (var p in propertyMappings)
{
x.Value.TryGetProperty(p.Value, out var prop);
var v = person.GetType().GetProperty(p.Key);
v.SetValue(person,Convert.ChangeType(prop.ToString(),v.PropertyType));
}
result.Add(person);
});
return result;
}</code>