2013-02-13 16 views
11

serializing मैं Asp.net JSON (JSON.NET का उपयोग) में या XML में वस्तु को धारावाहिक किसी उत्पाद केASP.net वेब एपीआई: परिवर्तन वर्ग के नाम जब

public class ProductDTO 
{ 
    public Guid Id { get; set; } 
    public string Name { get; set; } 
    // Other properties 
} 

के लिए एक डाटा ट्रांसफर वस्तु वर्ग है, यह ProductDTO ऑब्जेक्ट्स उत्पन्न करता है।

हालांकि, मैं ProductDTO से Product को क्रमबद्धता के दौरान नाम बदलने के लिए,, विशेषताओं के कुछ प्रकार का उपयोग कर चाहते हैं:

[Name("Product")] 
public class ProductDTO 
{ 
    [Name("ProductId")] 
    public Guid Id { get; set; } 
    public string Name { get; set; } 
    // Other properties 
} 

मैं यह कैसे कर सकते हैं?

+0

जेएसओएन को एक उदाहरण धारावाहिक होने पर उत्पाद डीटीओ का नाम कैसा है? JSON सभी के बाद untyped है, और जब मैं JSON.NET के साथ एक उदाहरण serialize करने की कोशिश, कक्षा का नाम मौजूद नहीं है। – aknuds1

उत्तर

16

मैं नहीं देख सकते हैं क्यों वर्ग के नाम JSON-धारावाहिक डेटा में आने से पहले करना चाहिए, लेकिन के रूप में एक्सएमएल का संबंध आप में सक्षम होना चाहिए DataContractAttribute के माध्यम से प्रकार का नाम नियंत्रित करते हैं, विशेष रूप से Name संपत्ति के माध्यम से:

using System.Runtime.Serialization; 

[DataContract(Name = "Product")] 
public class ProductDTO 
{ 
    [DataMember(Name="ProductId")] 
    public Guid Id { get; set; } 
    [DataMember] 
    public string Name { get; set; } 
    // Other properties 
} 

DataContractAttribute प्रासंगिक है क्योंकि ASP.NET वेब एपीआई के साथ डिफ़ॉल्ट एक्सएमएल serializer DataContractSerializer है। DataContractSerializer को धारावाहिक वर्गों पर लागू DataContractAttribute के माध्यम से कॉन्फ़िगर किया गया है और DataMemberAttribute क्रमबद्ध वर्ग सदस्यों पर लागू किया गया है।

+1

"जेएसओएन-सीरियलाइज्ड डेटा में वर्ग का नाम" के बारे में: आप सही हैं, जेएसओएन कक्षा के नाम को आउटपुट नहीं करता है, यह सिर्फ एक्सएमएल के लिए है। – Catalin

+0

@RaraituL ठीक है, उम्मीद है कि यह अब आपके लिए काम कर रहा है :) – aknuds1

3

एक विकल्प यह के लिए डिफ़ॉल्ट .Net Serialization attributes उपयोग करने के लिए है:

[DataContract(Name = "Product")] 
public class ProductDTO 
{ 
    [DataMember(Name = "ProductId")] 
    public Guid Id { get; set; } 
    [DataMember] 
    public string Name { get; set; } 
    // Other properties 
} 
संबंधित मुद्दे