2017-09-26 79 views
0

我有一個類,看起來像在C#:序列化對象的一部分,JSON

public class MyClass 
{ 
    public string Id { get; set; } 
    public string Description { get; set; } 
    public string Location { get; set; } 
    public List<MyObject> MyObjectLists { get; set; } 
} 

,我只是想序列化JSON 一部分該對象的:剛剛標識說明位置屬性,以便導致JSON看起來就像這樣:

{ 
    "Id": "theID", 
    "Description": "the description", 
    "Location": "the location" 
} 

是否有如何做到這一點?

回答

1

如果您正在使用JSON.Net你可以添加一個方法:

public bool ShouldSerializeMyObjectList() 
{ 
    return false; 
} 

或者您可以使用JsonIgnore你不想序列化的屬性之上,但也將受益於被反序列化阻止他們。

編輯:

JSON.Net自動查找與簽名public bool ShouldSerializeProperty()的方法和使用該作爲它是否應該序列的特定屬性的邏輯。下面是該文檔:

https://www.newtonsoft.com/json/help/html/ConditionalProperties.htm

下面是一個例子:

static void Main(string[] args) 
{ 
    var thing = new MyClass 
    { 
     Id = "ID", 
     Description = "Description", 
     Location = "Location", 
     MyObjectLists = new List<MyObject> 
     { 
      new MyObject { Name = "Name1" }, 
      new MyObject { Name = "Name2" } 
     } 
    }; 

    var json = JsonConvert.SerializeObject(thing); 
    Console.WriteLine(json); 
    Console.Read(); 
} 

class MyClass 
{ 
    public string Id { get; set; } 
    public string Description { get; set; } 
    public string Location { get; set; } 
    public List<MyObject> MyObjectLists { get; set; } 

    public bool ShouldSerializeMyObjectLists() 
    { 
     return false; 
    } 
} 

class MyObject 
{ 
    public string Name { get; set; } 
} 

的JSON輸出看起來是這樣的:{"Id":"ID","Description":"Description","Location":"Location"}

+0

但如何在序列化中使用該功能?我應該把它作爲一個論據還是什麼? –

+1

你實際上不需要做任何事情。 Json.Net自動查找簽名爲'bool ShouldSerailizePropertyName'的方法,並在序列化時使用這些方法。我將爲示例添加代碼。 – GBreen12

2

如果使用Newtonsoft Json.NET那麼你可以申請[JsonIgnore]屬性到MyObjectLists屬性。

public class MyClass 
{ 
    public string Id { get; set; } 
    public string Description { get; set; } 
    public string Location { get; set; } 

    [JsonIgnore] 
    public List<MyObject> MyObjectLists { get; set; } 
} 

更新#1

是的,你能避免[JsonIgnore]屬性。你可以寫一個自定義JsonConverter

在這裏看到的例子:Custom JsonConverter

您也可以使用來自@ GBreen12的ShouldSerialize解決方案。

+0

有沒有辦法避免JsonIgnore屬性? –