繁体   English   中英

如何在两个不同的类上使用相同的JsonProperty Name

[英]How to use same JsonProperty Name on two different class

如何在两个不同的类上使用相同的jsonProperty名称。 可能吗。 请告知我如何实现这一目标。 谢谢

    [JsonProperty("Data")]
    public RegisteredMailData[] RegisteredMailData { get; set; }

    [JsonProperty("Data")]
    public SendRecieveShipmentData[] SendRecieveShipmentData { get; set; }

编辑 - 添加模型以便更好地理解

public partial class MailRoomList
{
    [JsonProperty("GetListItemsResult")]
    public GetListItemsResult GetListItemsResult { get; set; }
}


public partial class GetListItemsResult
{
    [JsonProperty("Data")]
    public RegisteredMailData[] RegisteredMailData { get; set; }

    [JsonProperty("Data")]
    public SendRecieveShipmentData[] SendRecieveShipmentData { get; set; }


    [JsonProperty("ErrorDetail")]
    public ErrorDetail ErrorDetail { get; set; }

    [JsonProperty("Result")]
    public bool Result { get; set; }
}

public class SendRecieveShipmentData
{

    [JsonProperty("__type")]
    public string __type { get; set; }

    [JsonProperty("Address")]
    public object Address { get; set; }

    [JsonProperty("Company  Name")]
    public string CompanyName { get; set; }

    [JsonProperty("Doc Type")]
    public object DocType { get; set; }

    [JsonProperty("Line Manager Approva")]
    public string LineManagerApprova { get; set; }

    [JsonProperty("Material_x0028_Detail_x0029_")]
    public object Material_x0028_Detail_x0029_ { get; set; }

    [JsonProperty("Name")]
    public string Name { get; set; }

    [JsonProperty("PKG Type")]
    public object PKGType { get; set; }

    [JsonProperty("Request Category")]
    public object RequestCategory { get; set; }

    [JsonProperty("Sender Address")]
    public string SenderAddress { get; set; }

    [JsonProperty("Sender Company")]
    public object SenderCompany { get; set; }

    [JsonProperty("Sender Name")]
    public string SenderName { get; set; }

    [JsonProperty("Sender Phone")]
    public string SenderPhone { get; set; }

    [JsonProperty("Sender Zip Code")]
    public object SenderZipCode { get; set; }

    [JsonProperty("Shipping Companies")]
    public string ShippingCompanies { get; set; }

    [JsonProperty("Shipping Services")]
    public string ShippingServices { get; set; }

    [JsonProperty("Telephone")]
    public object Telephone { get; set; }

    [JsonProperty("Title")]
    public string Title { get; set; }

    [JsonProperty("ZIP Code")]
    public object ZIPCode { get; set; }
}

public partial class RegisteredMailData
{
    [JsonProperty("__type")]
    public string Type { get; set; }

    [JsonProperty("Collecting Date")]
    public string CollectingDate { get; set; }

    [JsonProperty("Created")]
    public string Created { get; set; }

    [JsonProperty("Designee ين_x0")]
    public string Designeeين_X0 { get; set; }

    [JsonProperty("Mobile phone")]
    public string MobilePhone { get; set; }

    [JsonProperty("Receipent Date")]
    public string ReceipentDate { get; set; }

    [JsonProperty("Shipping Companies")]
    public string ShippingCompanies { get; set; }

    [JsonProperty("Status")]
    public string Status { get; set; }

    [JsonProperty("Tel Number")]
    public string TelNumber { get; set; }

    [JsonProperty("Title")]
    public object Title { get; set; }
}

这似乎是一个XY问题,可以使用泛型来解决

public partial class MailRoomList<T> {
    [JsonProperty("GetListItemsResult")]
    public GetListItemsResult<T> GetListItemsResult { get; set; }
}

public class GetListItemsResult<T> {
    [JsonProperty("Data")]
    public T[] Data { get; set; }

    [JsonProperty("ErrorDetail")]
    public ErrorDetail ErrorDetail { get; set; }

    [JsonProperty("Result")]
    public bool Result { get; set; }
}

这样,反序列化就可以了

var result = JsonConvert.DeserializeObject<MailRoomList<RegisteredMailData>>(json);

并可以访问所需的类型数组

这是不可能的 - 如果你尝试序列化一个具有相同名称的2个json属性的对象,你将得到一个Newtonsoft.Json.JsonSerializationException

演示代码,使用您的模型类:

var data = new GetListItemsResult
{
    SendRecieveShipmentData = new SendRecieveShipmentData[]
    {
        new SendRecieveShipmentData
        {
            Name = "foo"
        }
    },

    RegisteredMailData = new RegisteredMailData[]
    {
        new RegisteredMailData
        {
            Status = "ok"
        }
    }
};

string json = JsonConvert.SerializeObject(data);

异常消息:

Newtonsoft.Json.JsonSerializationException:''ConsoleApp3.GetListItemsResult'上已存在名为'Data'的成员。 使用JsonPropertyAttribute指定另一个名称。

解决方案是提供不同的属性名称,例如:

public partial class GetListItemsResult
{
    [JsonProperty("MailData")]
    public RegisteredMailData[] RegisteredMailData { get; set; }

    [JsonProperty("ShipmentData")]
    public SendRecieveShipmentData[] SendRecieveShipmentData { get; set; }


    [JsonProperty("ErrorDetail")]
    public ErrorDetail ErrorDetail { get; set; }

    [JsonProperty("Result")]
    public bool Result { get; set; }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM