首页 > 解决方案 > 我想将 ac# 列表转换为 JArray

问题描述

如果我使用 JARRAY.FROMOBJECT 我得到一个空的骨架 json,有人可以帮我告诉我如何将列表转换为 jarray。谢谢

class EGTenantCreated
{
internal string id { get; set; }
internal string subject { get; set; }
internal EGData data { get; set; }
internal string eventType { get; set; }
internal string eventTime { get; set; }
internal string dataVersion { get; set; }
internal string metadataVersion { get; set; }
internal string topic { get; set; }
}

class EGData
{
internal string TenantId { get; set; }
internal string TenantName { get; set; }
internal string AdministratorEmail { get; set; }
internal string ProductId { get; set; }
internal string PackageInstanceId { get; set; }
internal string CorrelationId { get; set; }
}

public List<EGTenantCreated> UpdateEGTenant()
{
DateTime date = new DateTime();
string tenantName = "Tenant" + date.Day.ToString() + date.Month.ToString() + 
date.Year.ToString() + "_"
+ date.Hour.ToString() + date.Minute.ToString();

string adminEmail = "user" + date.Day.ToString() + date.Month.ToString() + 
date.Year.ToString() + "_"
+ date.Hour.ToString() + date.Minute.ToString() + "@testmail.com";

EGData egData = new EGData();
egData.TenantId = Guid.NewGuid().ToString();
egData.TenantName = tenantName;
egData.AdministratorEmail = adminEmail;
egData.ProductId = "Erp";
egData.PackageInstanceId = "522b0dc0-5db9-437d-97cc-cd4c742b1b22";
egData.CorrelationId = Guid.NewGuid().ToString();

EGTenantCreated egTenant = new EGTenantCreated();
egTenant.id = Guid.NewGuid().ToString();
egTenant.subject = "/DeploymentRegistry/TenantCreated";
egTenant.eventType = "TenantCreated";
egTenant.eventTime = "2019-10-04T20:02:54.9411815Z";
egTenant.dataVersion = "1.0.0";
egTenant.metadataVersion = "1";
egTenant.topic = "topictest";
egTenant.data = egData;

List<EGTenantCreated> list = new List<EGTenantCreated>();
list.Add(egTenant);

return list;
}
var list = UpdateEGTenant();
var jArray = JArray.FromObject(list);  //here i get an empty json

这是我得到错误的地方,当我打印 jArray.ToString() 时,我得到一个空的 json 骨架,并且没有将我的列表转换为预期的 jarray 对象。这是真实的代码。

标签: c#json.net

解决方案


您看到的问题是因为您的属性是internal. 要解决这个问题,您可以创建它们public和类internal(如果没有指定修饰符,这是默认值),或者您可以将JsonProperty属性放在每个属性上:

class EGTenantCreated
{
    [JsonProperty]
    internal string id { get; set; }
    [JsonProperty]
    internal string subject { get; set; }
    [JsonProperty]
    internal EGData data { get; set; }
    [JsonProperty]
    internal string eventType { get; set; }
    [JsonProperty]
    internal string eventTime { get; set; }
    [JsonProperty]
    internal string dataVersion { get; set; }
    [JsonProperty]
    internal string metadataVersion { get; set; }
    [JsonProperty]
    internal string topic { get; set; }
}

class EGData
{
    [JsonProperty]
    internal string TenantId { get; set; }
    [JsonProperty]
    internal string TenantName { get; set; }
    [JsonProperty]
    internal string AdministratorEmail { get; set; }
    [JsonProperty]
    internal string ProductId { get; set; }
    [JsonProperty]
    internal string PackageInstanceId { get; set; }
    [JsonProperty]
    internal string CorrelationId { get; set; }
}

在线尝试


推荐阅读