Namespace สำหรับ [DataContract]


230

ฉันไม่สามารถค้นหาเนมสเปซที่จะใช้สำหรับ[DataContract]และ[DataMember]องค์ประกอบ จากสิ่งที่ฉันพบดูเหมือนว่าการเพิ่มสิ่งต่อไปนี้น่าจะเพียงพอ แต่ในกรณีของฉันมันไม่เป็นเช่นนั้น

using System;
using System.Runtime.Serialization;

นี่คือตัวอย่างรหัสของฉัน:

using System;
using System.Runtime.Serialization;

namespace MyNamespace {

    [DataContract]
    public class Tuple<T1, T2> {
            // A custom implementation of a Tuple
            //...
            //...
        }
}

และข้อผิดพลาดที่ฉันได้รับ:

ไม่พบประเภทหรือชื่อเนมสเปซ 'DataContract' (คุณพลาดการใช้คำสั่งหรือการอ้างอิงแอสเซมบลีหรือไม่)

ฉันไม่ได้ใช้เนมสเปซที่ใช่ไหม?


การใช้ VS 2017 ข้อผิดพลาดของคอมไพเลอร์ไม่สามารถสร้างไม่มีข้อความในรายการข้อผิดพลาดหรือการบ่งชี้ใด ๆ เลย ไม่มีการระบายสีไวยากรณ์ของ DataContract ไม่มีอะไร
dudeNumber4

@ dudeNumber4 คลิกขวาที่โครงการของคุณเพิ่ม / อ้างอิง ในกล่องโต้ตอบค้นหา System.Runtime.Serialization และทำให้ช่องทำเครื่องหมาย cheked รัฐ จากนั้นกด "ตกลง"
Sim Mak

คำตอบ:


433

DataContractAttributeคลาสอยู่ในSystem.Runtime.Serializationเนมสเปซ

System.Runtime.Serialization.dllคุณควรเพิ่มการอ้างอิงถึง ชุดประกอบนั้นไม่ได้ถูกอ้างอิงโดยค่าเริ่มต้น ในการเพิ่มการอ้างอิงถึงโครงการของคุณคุณต้องไปที่การอ้างอิง -> เพิ่มการอ้างอิงใน Solution Explorer และเพิ่มการอ้างอิงแอสเซมบลีด้วยตนเอง


59
.... และแอสเซมบลีนั้นไม่ได้อ้างอิงตามค่าเริ่มต้นดังนั้นคุณต้องไปที่References -> Add ReferenceSolution Explorer และเพิ่มการอ้างอิงแอสเซมบลี ...
marc_s

11
ใช่ฉันไม่มีข้อมูลอ้างอิงในโซลูชันของฉัน! using System.Runtime.Serialization;ผมคิดว่าถ้ามีการอ้างอิงถูกต้องก็จะได้รับฉันมีข้อผิดพลาดในบรรทัด ฉันเดาว่าฉันผิด :)
โอทิเอล

2
ฮึ. ทำไมบนโลกจึงไม่เกิดข้อผิดพลาดในusingข้อความนี้? นั่นดูเหมือนจะสมเหตุสมผลสำหรับฉัน
Yatrix

7
ฉันเดาว่าเพราะ dll อีกประการหนึ่งคือการใช้ namespace ว่า (มิฉะนั้นคุณจะได้รับข้อผิดพลาด)
กุย

4
ขอบคุณ! ไม่มีตัวอย่างเอกสารของ Microsoft ที่กล่าวถึงสิ่งนี้
BobRodes


5

[DataContract] และแอตทริบิวต์ [DataMember] พบได้ใน System.ServiceModel namespace ซึ่งอยู่ใน System.ServiceModel.dll

System.ServiceModel ใช้เนมสเปซของระบบและ System.Runtime.Serialization เพื่อทำให้ดาต้าเบสเป็นอนุกรม


5

ใน visual studio สำหรับ. Net 4.0 framework

  1. ลองเพิ่มการอ้างอิงใหม่ให้กับโครงการ
  2. System.Runtime.Serializationบนสุทธิแท็บค้นหา
  3. using System.Runtime.Serializationตอนนี้คุณสามารถใช้ และข้อผิดพลาดจะไม่ปรากฏ

0

ก่อนอื่นฉันเพิ่มการอ้างอิงไปยังรุ่นของฉันจากนั้นฉันใช้ในรหัสของฉัน มีการอ้างอิงสองรายการที่คุณควรเพิ่ม:

ใช้ System.ServiceModel;
ใช้ System.Runtime.Serialization

จากนั้นปัญหานี้ได้รับการแก้ไขในโปรแกรมของฉัน ฉันหวังว่าคำตอบนี้จะช่วยคุณได้ ขอบคุณ


0

ฉันแก้ไขปัญหานี้โดยเพิ่มไฟล์ C: \ Program (x86) \ Reference แอสเซมบลี \ Microsoft \ Framework.NETFramework \ v4.0 \ System.Runtime.Serialization.dll ในการอ้างอิง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.