簡體   English   中英

使用JSON.NET,如何序列化這些繼承的成員?

[英]Using JSON.NET, how do I serialize these inherited members?

我有以下內容:

public class MyClass : SuperClass {    
  [JsonProperty]
  public virtual string Id { get; set; }
}

public abstract class SuperClass { 
  public int GetHashCode() {
  //do things here
  }
}

我無法改變SuperClass 當我使用JsonNet序列化到Json時,我會做這樣的事情:

    JsonSerializerSettings serializer = new JsonSerializerSettings {
        //serializer settings
    };

    var jsonNetResult = new JsonNetResult {
        Data = myClass,
        SerializerSettings = serializer
    };

    return jsonNetResult;

顯然它不會序列化GetHashCode() 如果我走:

    var jsonNetResult = new JsonNetResult {
        Data = myClass.GetHashCode(),
        SerializerSettings = serializer
    };

它會正確序列化值,是否有一些序列化器設置我可以用來告訴它包含GetHashCode()

編輯:我現在應該添加,我正在創建一個只能實現這一目標的屬性,即

[JsonProperty]
public virtual int GetHashCodeJson { get { return GetHashCode(); }

對於JSON.Net而言,這與一般的.net序列化並不是一個問題。

您需要按屬性序列化對象,並且要求序列化方法的返回值。 所以沒有辦法用你想要的語法來做到這一點。

你可以這樣做:

Data = myClass.GetHashCode()

只意味着可以序列化方法(int)的返回值,而不是序列化程序完全關心該值來自何種方法。

如果你考慮一下,那么說一個值是方法的序列化返回值沒有多大意義,因為你如何反序列化呢? 您永遠無法將值寫回方法,因為它只返回值,而不是像{get; set;}這樣的屬性的雙向關系。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM