序列化时需要将父对象的值注入子对象

时间:2019-07-19 12:53:18

标签: c# json.net

我正在设置一个API,该API作为响应的一部分来动态通告服务,让消费者知道他们还可以对该对象做什么。我不知道如何将父对象的对象类型和ID注入服务URI。

我正在使用属性和自定义JSON.NET IValueProviders创建URI(对于其他动态示例来说效果很好),但是在这种情况下,我需要对象外部的属性。

类看起来类似于:

public class Person
{
public Guid ID { get; set; }
public string Type { get; set; }
public string Name { get; set; }
[ObjectUri]
public string Uri { get; set; }

...

public IEnumerable<Service> Services { get; set; }
}

public class Service 
{
public string ServiceName { get; set; }

[ServiceUri]
public string ServiceUri { get; set; }
}

我正在使用自定义合同解析器来添加自定义IValueProvider(ObjectUriValueProvider),该IValueProvider呈现对象URI(显然只是使用来自同一对象的信息)。

但是,由于合同解析器在抽象模型级别上运行,因此无法将与父对象有关的具体值传递给ServiceUriValueProvider。

理想的输出:

{
"id": "ae330dc8-0217-4c58-b64b-44a1c7ba4f46",
"type": "Person",
"name": "Fred",
"uri": "https://server/api/person/ae330dc8-0217-4c58-b64b-44a1c7ba4f46"
...
"services": [
 {
"serviceName": "ListNotes",
"serviceUri": "https://server/api/notes/person/ae330dc8-0217-4c58-b64b-44a1c7ba4f46"
},
{
"serviceName": "ListContactDetails",
"serviceUri": "https://server/api/contacts/person/ae330dc8-0217-4c58-b64b-44a1c7ba4f46"
}
]
}

目前的实际结果不包括正确填充到的类型和ID

{
"services": [
 {
"serviceName": "ListNotes",
"serviceUri": "https://server/api/notes/{type}/{id}"
},{
"serviceName": "ListContactDetails",
"serviceUri": "https://server/api/contacts/{type}/{id}"
}
]
}

0 个答案:

没有答案
相关问题