2012-08-05 95 views
0

我正在使用MVC 4 Web API並遇到序列化問題,我無法找到答案。到代碼...在序列化對象列表時輸出id而不是完整對象

比方說,我有以下類別:

public class Item { 
    public int ID; 
    public String Name; 
    public bool Active; 
} 

public class Source { 
    public int ID; 
    public int Name; 
} 

項目的系列化名單看起來像:

{ 
    ID: 1, 
    Name: "That big thing", 
    Active: true, 
    Source: { 
     ID: 1, 
     Name: "The street" 
    } 
} 

如果有很多項目在我的列表中,將每個源序列化爲對象將效率低下。我想要做的只是在列表中獲取Sources ID。喜歡的東西:

{ 
    ID: 1, 
    Name: "That big thing", 
    Active: true, 
    Source: 1 
} 

回答

0

我假設,根據您系列化的產品清單上,該項目類也包含了Source屬性,是這樣的:

public class Item { 
    public int ID; 
    public String Name; 
    public bool Active; 
    public Source Source; 
} 

如果是這樣的話,你可以添加和XmlIgnore屬性Source屬性,然後露出源的ID作爲新的SourceID屬性:

public class Item 
    { 
     public int ID; 
     public String Name; 
     public bool Active; 
     [XmlIgnore] 
     public Source Source; 
     [XmlElement("Source")] 
     public int SourceID 
     { 
      get 
      { 
       if (Source != null) 
       { 
        return Source.ID; 
       } 
       else 
       { 
        return 0; 
       } 
      } 
      set 
      { 
       // ignore incoming values 
      } 
     } 
    } 

它可能是,JSON庫不接受的XML屬性;如果是這種情況,您可以使用其相應的屬性(即JsonIgnore,JsonProperty)。

0

這裏發佈的[JsonIgnore]建議是一個不錯的選擇,但它只適用於JSON.NET序列化。

爲此在一個通用的方式,添加引用System.Runtime.Serialization DLL並相應地修飾你的型號:

[DataContract] 
public class Source 
{ 
    [DataMember] 
    public int ID; 

    public int Name; 
} 

這將省略任何MediaTypeFormatting您在網絡使用Name屬性API即

<Active>true</Active> 
<ID>1</ID> 
<Name>test</Name> 
<Source> 
<ID>1</ID> 
</Source> 

"ID":1, 
"Name":"test", 
"Active":true, 
"Source":{"ID":1}