2017-06-19 65 views
0

我有一個對象與符號:如何序列化空對象C#來JSON

public class CompanyTeam 
{ 
    public string companyGuid { get; set; } 
    public string companyId { get; set; } 
} 

public class Team 
{ 
    public string teamGuid { get; set; } 
    public string teamName { get; set; } 
    public CompanyTeam company { get; set; } 
} 

團隊對象有數據除了CompanyTeam。當我的序列化對象

json = new JavaScriptSerializer().Serialize(teamObject); 

回報

{ 
    "teamGuid": "GUIDdata", 
    "teamName": "nameData", 
    "company": null, 
} 

我嘗試實例CompanyTeam對象,但以空數據返回對象:

{ 
    "teamGuid": "GUIDdata", 
    "teamName": "nameData", 
    "company": { 
        "companyGuid" : null, 
        "companyId" : null 
       }, 
} 

你怎麼會得到這樣的結果?有任何想法嗎?

{ 
    "teamGuid": "GUIDdata", 
    "teamName": "nameData", 
    "company": {}, 
} 
+0

我對你想要的1/2方式有點失落。什麼代表你期望/想要的東西? – Trey

+0

我不知道如何甚至可以用JavaScriptSerializer做到這一點,但如果您使用JSON.net(https://www.nuget.org/packages/Newtonsoft.Json/),則可以省略屬性從序列化空值(http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_NullValueHandling.htm)。你也可以調整基本的任何東西,所以當序列化JSON時,它通常是首選項。 – ckuri

+0

@Trey我需要的序列化結果有「公司」:{},它代表JSON中的空對象 – CMedina

回答

2

您可以嘗試以達到你想要什麼,用保持JavaScriptSerializer如下:

public class Team 
{ 
    public Team() 
    { 
     teamGuid = "I have a value!"; 
     teamName = "me too!"; 
    } 

    public Team(CompanyTeam company) : this() 
    { 
     this.company = company; 
    } 
    public string teamGuid { get; set; } 
    public string teamName { get; set; } 
    public CompanyTeam company { get; set; } 

    public dynamic GetSerializeInfo() => new 
    { 
     teamGuid, 
     teamName, 
     company = company ?? new object() 
    }; 
} 

與貴公司類

public class CompanyTeam 
    { 
     public CompanyTeam() 
     { 
      companyGuid = "someGuid"; 
      companyId = "someId"; 
     } 
     public string companyGuid { get; set; } 
     public string companyId { get; set; } 
    } 

你可以寫返回的方法動態的,你可以返回公司,如果它不是空的或新的對象。測試:

static void Main(string[] args) 
     { 
      var teamObj = new Team(); 
      var json = new JavaScriptSerializer().Serialize(teamObj.GetSerializeInfo()); 
      Console.WriteLine(json); 
      Console.ReadLine(); 
     } 

和輸出:

{ 「teamGuid」: 「我有一個價值!」, 「teamName」: 「我也是」, 「公司」:{}}

如果使用constructur提供了一個不空公司,那麼你得到:

{ 「teamGuid」: 「我有一個價值!」, 「teamName」: 「我也是!」, 「公司」:{ 「companyGuid」:「someGuid」,「companyId」:「someId」}}

希望這有助於!