簡體   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