Microsoft 翻译 - 找不到类型或命名空间名称“DataContract”

Posted

技术标签:

【中文标题】Microsoft 翻译 - 找不到类型或命名空间名称“DataContract”【英文标题】:Microsoft Translate - The type or namespace name 'DataContract' could not be found 【发布时间】:2012-11-01 05:58:04 【问题描述】:

我正在尝试使用 Microsoft Translate API 为 Sharepoint Web 部件实现 C# 代码,此处提供示例代码。 http://msdn.microsoft.com/en-us/library/ff512421.aspx

我已经设法解决了其他问题,但是当我尝试部署时,我收到了 10 个关于 DataMember 和 DataContract 相关行的错误。我是 .NET 和 C# 的新手,我希望我能在这里得到一些帮助。我已经尝试了几次,虽然我有其他参考问题的股票,但我之前没有收到这个错误。现在我重新创建了,我得到了这个错误。

The type or namespace name 'DataContract' could not be found (are you missing a using directive or an assembly reference?)

这是我的代码。

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Text;
using System.Net;
using System.IO;
using System.Runtime.Serialization.Json;
using System.Runtime.Serialization;
using System.Web;
using System.Media;
using Microsoft.SharePoint;
using System.Data.SqlClient;

namespace MyTranslatorTool.MyTranslator

    public partial class MyTranslatorUserControl : UserControl
    
        protected void Page_Load(object sender, EventArgs e)
        
            AdmAccessToken admToken;
            string headerValue;
            //Get Client Id and Client Secret from https://datamarket.azure.com/developer/applications/
            //Refer obtaining AccessToken (http://msdn.microsoft.com/en-us/library/hh454950.aspx) 
            AdmAuthentication admAuth = new AdmAuthentication("clientid", "gpOGezhz/1dX6hgR6QZhG2j0Z45vw4HlnMWOwr2gNeA+");
            try
            
                admToken = admAuth.GetAccessToken();
                // Create a header with the access_token property of the returned token
                headerValue = "Bearer " + admToken.access_token;
                TranslateMethod(headerValue);
            
            catch (WebException er)
            
                ProcessWebException(er);
                Console.WriteLine("Press any key to continue...");
                Console.ReadKey(true);
            
            catch (Exception ex)
            

                Console.WriteLine(ex.Message);
                Console.WriteLine("Press any key to continue...");
                Console.ReadKey(true);
            

        
        private static void TranslateMethod(string authToken)
        
            //original text = text
            //translated text = translation
            //original language = from
            //destinating language = to
            string text = "Use pixels to express measurements for padding and margins.";
            string from = "en";
            string to = "de";

            string uri = "http://api.microsofttranslator.com/v2/Http.svc/Translate?text=" + System.Web.HttpUtility.UrlEncode(text) + "&from=" + from + "&to=" + to;

            HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(uri);
            httpWebRequest.Headers.Add("Authorization", authToken);
            WebResponse response = null;
            try
            
                response = httpWebRequest.GetResponse();
                using (Stream stream = response.GetResponseStream())
                
                    //translated text
                    System.Runtime.Serialization.DataContractSerializer dcs = new System.Runtime.Serialization.DataContractSerializer(Type.GetType("System.String"));
                    string translation = (string)dcs.ReadObject(stream);
                    Console.WriteLine("Translation for source text '0' from 1 to 2 is", text, "en", "de");
                    Console.WriteLine(translation);
                    //push to view
                    //alpha.Text = translation;
                
                Console.WriteLine("Press any key to continue...");
                Console.ReadKey(true);
            
            catch
            
                throw;
            
            finally
            
                if (response != null)
                
                    response.Close();
                    response = null;
                
            
        
        private static void ProcessWebException(WebException e)
        
            Console.WriteLine("0", e.ToString());
            // Obtain detailed error information
            string strResponse = string.Empty;
            using (HttpWebResponse response = (HttpWebResponse)e.Response)
            
                using (Stream responseStream = response.GetResponseStream())
                
                    using (StreamReader sr = new StreamReader(responseStream, System.Text.Encoding.ASCII))
                    
                        strResponse = sr.ReadToEnd();
                    
                
            
            Console.WriteLine("Http status code=0, error message=1", e.Status, strResponse);
        
    
    [DataContract]
    public class AdmAccessToken
    
        [DataMember]
        public string access_token  get; set; 
        [DataMember]
        public string token_type  get; set; 
        [DataMember]
        public string expires_in  get; set; 
        [DataMember]
        public string scope  get; set; 
    

    public class AdmAuthentication
    
        public static readonly string DatamarketAccessUri = "https://datamarket.accesscontrol.windows.net/v2/OAuth2-13";
        private string clientId;
        private string cientSecret;
        private string request;

        public AdmAuthentication(string clientId, string clientSecret)
        
            this.clientId = clientId;
            this.cientSecret = clientSecret;
            //If clientid or client secret has special characters, encode before sending request
            this.request = string.Format("grant_type=client_credentials&client_id=0&client_secret=1&scope=http://api.microsofttranslator.com", HttpUtility.UrlEncode(clientId), HttpUtility.UrlEncode(clientSecret));
        

        public AdmAccessToken GetAccessToken()
        
            return HttpPost(DatamarketAccessUri, this.request);
        

        private AdmAccessToken HttpPost(string DatamarketAccessUri, string requestDetails)
        
            //Prepare OAuth request 
            WebRequest webRequest = WebRequest.Create(DatamarketAccessUri);
            webRequest.ContentType = "application/x-www-form-urlencoded";
            webRequest.Method = "POST";
            byte[] bytes = Encoding.ASCII.GetBytes(requestDetails);
            webRequest.ContentLength = bytes.Length;
            using (Stream outputStream = webRequest.GetRequestStream())
            
                outputStream.Write(bytes, 0, bytes.Length);
            
            using (WebResponse webResponse = webRequest.GetResponse())
            
                DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(AdmAccessToken));
                //Get deserialized object from JSON stream
                AdmAccessToken token = (AdmAccessToken)serializer.ReadObject(webResponse.GetResponseStream());
                return token;
            
        
    

【问题讨论】:

【参考方案1】:

尝试添加对:System.Runtime.Serialization的引用

【讨论】:

你能帮我解决这个问题吗? ***.com/questions/13350678/…

以上是关于Microsoft 翻译 - 找不到类型或命名空间名称“DataContract”的主要内容,如果未能解决你的问题,请参考以下文章

找不到与命名空间 http://schemas.microsoft.com/WebParts/v3/Publishing/runtime 关联的脚本或扩展对象

有问题,找不到类型或命名空间名称“List”

找不到类型或命名空间名称“DbContext”[关闭]

找不到类型或命名空间名称“异步”[重复]

找不到类型或命名空间名称“readFullyStream”

找不到类型或命名空间名称“Windows”