我有一个类 SubscriptionType
,它的属性是一个复杂的类,称为 InfoText
、LongInfoText
和 Name
,它们都有 en
和 {{1 }} 财产。
当我使用 ur
库从 wep api 反序列化我的 json 时。检索所有对象,期望属性中存在的复杂类型。显示空值。
我尝试使用我自己的解析器,但没有用。有人可以帮助我吗?谢谢
我的解析器
JsonApiNet 3.0.0
我的类型
public class NamingThingsIsHardResolver : JsonApiPropertyResolver
{
public override PropertyInfo ResolveJsonApiAttribute(Type type, string attributeName)
{
if (type == typeof(SubscriptionType) && attributeName == "name")
{
return type.GetProperty("Name");
}
return base.ResolveJsonApiAttribute(type, attributeName);
}
}
我的复杂类型
public class Subscription
{
public string Id { get; set; }
public string ContractId { get; set; }
public string PaymentType { get; set; }
public string Status { get; set; }
public SubscriptionType SubscriptionType { get; set; }
}
public class SubscriptionType
{
public string Id { get; set; }
public string BusinessModelType { get; set; }
public InfoText InfoText;
public string LineType { get; set; }
public LongInfoText LongInfoText;
//[JsonApiRelationship("name")] // [JsonApiAttribute("name")] //also not working
public string Name;
}
我的 json 这个json被简化了。删除了一些属性和关系
public class Name
{
public string En { get; set; }
public string Ur { get; set; }
}
public class InfoText
{
public string En { get; set; }
public string Ur { get; set; }
}
public class LongInfoText
{
public string En { get; set; }
public string Ur { get; set; }
}
答案 0 :(得分:0)
我没有在 JsonApiNet 库中找到解决方案,所以我创建了一个如下所示的 json 反序列化器。我对它不满意,但它有效。请改进这个答案谢谢。
我在 SubscriptionType.cs 中的方法
public void InjectAttributes(JsonApiAttributes attributes) {
// InfoText
var infoText = attributes["info-text"].ToString();
InfoText = JsonConvert.DeserializeObject<Lang>(infoText);
// LongInfoText
var longInfoText = attributes["long-info-text"].ToString();
LongInfoText = JsonConvert.DeserializeObject<Lang>(longInfoText);
// Name
var name = attributes["name"].ToString();
Name = JsonConvert.DeserializeObject<Lang>(name);
}
我是这样称呼它的。
var document = JsonApi.Document<List<Subscription>>(response.Content.ReadAsStringAsync().Result);
List<Subscription> subscriptions = document.Resource;
foreach (var subscription in subscriptions)
{
subscription.SubscriptionType.InjectAttributes(document.Included[0].Attributes);
}
还创建了一个单独的 c# 对象类
public class Lang
{
public string En { get; set; }
public string Ur { get; set; }
}