亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從 JSON 反序列化屬性兩次?

從 JSON 反序列化屬性兩次?

C#
慕哥9229398 2021-10-09 16:27:01
我有一個奇怪的問題:我有一個包含子類 B 的 A 類。 A 類相當復雜并且經常變化。我只需要 A 類屬性的一小部分和 B 類的完整 json 表示,即可將其傳遞給不同的服務。這看起來像這樣[DataContact]public class A {    [DataMember]    public B Inner {get; set;}}[DataContact]public class B {    [DataMember]    public int SomeThing {get; set;}}我想實現的是:[DataContact]public class ADesired{    [DataMember]    public B Inner {get; set;}    [DataMember]    public string InnerAsJsonString {get; set;}}我嘗試了最明顯的想法(例如,引用同名的 Jsonproperty,但 NewtonSoft.Json 拒絕執行此操作)到目前為止我嘗試過的:JsonConverter,根本不起作用。Json屬性:[DataContact]public class ADesired{    [JsonProperty("Source")]    public B Inner {get; set;}    [JsonProperty("Source")]    public string InnerAsJsonString {get; set;}}這在運行時不起作用,因為檢測到對同一屬性的引用。核選項:只需在控制器中反序列化字符串兩次,但這感覺是錯誤的。
查看完整描述

2 回答

?
守著星空守著你

TA貢獻1799條經驗 獲得超8個贊

一種選擇是在類中序列化它


[DataContact]

public class ADesired

{

    [DataMember]

    public B Inner {get; set;}

    public string InnerAsJsonString => Newtonsoft.Json.JsonConvert.SerializeObject(Inner);

}


查看完整回答
反對 回復 2021-10-09
?
holdtom

TA貢獻1805條經驗 獲得超10個贊

如果你不關心性能,你可以使用 JObject 作為 Json-Property 類型。


using Newtonsoft.Json;

using Newtonsoft.Json.Linq;


[DatanContract]

public class ADesired

{

    [JsonIgnore]

    public B Inner { get; set; }


    [JsonIgnore]

    public string InnerJson { get; set; }


    [DataMember]

    [JsonProperty(nameof(Inner))

    public JObject JInner

    {

        get => JObject.FromObject(Inner);

        set { Inner = value.ToObject<B>(); InnerJson = value.ToString(); }

    }

}

這樣在反序列化時,實際的 json 被保存為 json InnerJson,可以是什么,反序列化為Inner,當序列化回來時,任何內容Inner都會被序列化。


查看完整回答
反對 回復 2021-10-09
  • 2 回答
  • 0 關注
  • 300 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號