我試圖用下面的控制器返回JSON對象:如何返回一個對象並將其格式化爲json?
public async Task<IHttpActionResult> Get(string query)
{
var client = new HttpClient(new HttpClientHandler()
{
Credentials = new NetworkCredential("myuser", "NotSoSecret#1", "mydomain"),
});
var ipAddress = Dns.GetHostAddresses("myorgetc.com").ToList()[0];
client.BaseAddress = new Uri(string.Format("http://{0}/myorg/api/data/v8.1/", ipAddress.ToString()));
HttpResponseMessage response = await client.GetAsync(client.BaseAddress +"accounts"+ query);
object result;
if (response.IsSuccessStatusCode)
{
result = await response.Content.ReadAsAsync<object>();
return Ok(result);
}
return NotFound();
}
而且它返回了以下異常:
此XML文件沒有出現有關聯 任何與它的樣式信息。文檔樹如下所示。發生錯誤 。類型 'Newtonsoft.Json.Linq.JToken'是一個不受支持的遞歸收集數據合同 。考慮修改 集合'Newtonsoft.Json.Linq.JToken'的定義以刪除對 本身的引用。 System.Runtime.Serialization.InvalidDataContractException 在 System.Runtime.Serialization.DataContract.ValidatePreviousCollectionTypes(類型 collectionType,類型ITEMTYPE,字典
2 previousCollectionTypes) at System.Runtime.Serialization.DataContract.GetNonDCTypeStableName(Type type, Dictionary
2個previousCollectionTypes)在 System.Runtime.Serialization.DataContract.GetStableName(類型類型, 字典2 previousCollectionTypes, Boolean& hasDataContract) at System.Runtime.Serialization.DataContract.GetDefaultStableLocalName(Type type) at System.Runtime.Serialization.DataContract.GetDCTypeStableName(Type type, DataContractAttribute dataContractAttribute) at System.Runtime.Serialization.DataContract.GetStableName(Type type, Dictionary
2 previousCollectionTypes,布爾& hasDataContract)處 System.Runtime.Seria System.Runtime.Serialization.DataContract.GetCollectionStableName(類型 類型,類型ITEMTYPE,Dictionary`2 previousCollectionTypes, CollectionDataContractAttribute & collectionContractAttribute) lization.CollectionDataContract.CollectionDataContractCriticalHelper..ctor(類型 類型,CollectionKind種類,類型ITEMTYPE,MethodInfo的 getEnumeratorMethod,字符串serializationExceptionMessage,字符串 deserializationExceptionMessage)在 System.Runtime.Serialization.CollectionDataContract.CollectionDataContractCriticalHelper..ctor(類型 類型,CollectionKind種類,類型ITEMTYPE,MethodInfo的 getEnumeratorMethod,MethodInfo的addMethod,ConstructorInfo 構造函數)在 System.Runtime.Serialization.CollectionDataContract..ctor(類型類型, CollectionKind種類,類型ITEMTYPE,MethodInfo的getEnumeratorMethod, 的MethodInfo addMethod,ConstructorInfo構造,布爾 isConstructorCheckRequired)處 System.Runtime.Serialization.DataContract.DataContractCriticalHelper.CreateDataContract System.Runtime.Serialization.CollectionDataContract.IsCollectionOrTryCreate(類型 類型,布爾tryCreate,DataContract & dataContract,類型& ITEMTYPE, 布爾constructorRequired,布爾skipIfReadOnlyContract) (的Int32 ID,類型句柄的RuntimeTypeHandle,類型型)在 System.Runtime.Serialization.DataContract.DataContractCriticalHelper.GetDataContractSkipValidation(的Int32 ID,類型句柄的RuntimeTypeHandle,類型型)在 System.Runtime.Serialization.DataContractSerializer.GetDataContract(DataContract declaredTypeCont RACT,類型的declaredType,類型的objectType)處 System.Runtime.Serialization.DataContractSerializer.InternalWriteObject(XmlWriterDelegator 作家,對象圖,DataContractResolver System.Runtime.Serialization.DataContractSerializer.InternalWriteObjectContent(XmlWriterDelegator 作家,對象圖,DataContractResolver dataContractResolver) System.Runtime.Serialization.XmlObjectSerializer.WriteObjectHandleExceptions(XmlWriterDelegator writer,Object graph,DataContractResolver dataContractResolver)at System.Runtime.Serialization.DataContractSerializer。的writeObject(的XmlWriter 作家,對象圖)在 System.Net.Http.Formatting.XmlMediaTypeFormatter.WriteToStream(類型 類型,對象的值,流writeStream,HttpContent含量)在 System.Net.Http.Formatting.XmlMediaTypeFormatter.WriteToStreamAsync(鍵入 類型,對象的值,流writeStream,HttpContent內容, TransportContext transportContext,的CancellationToken 的CancellationToken)---從先前位置棧跟蹤其中 拋出異常---在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess完(任務 任務) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任務 任務)在 System.Web.Http.Owin.HttpMessageHandlerAdapter.d__13.MoveNext()
我在做什麼錯?如何在不知道開發時的確切結構的情況下返回JSON對象?
這裏是我的啓動:
public static class Startup
{
// This code configures Web API. The Startup class is specified as a type
// parameter in the WebApp.Start method.
public static void ConfigureApp(IAppBuilder appBuilder)
{
// Configure Web API for self-host.
HttpConfiguration config = new HttpConfiguration();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
var container = new UnityContainer();
container.RegisterType<IAccountsRepository, AccountsRepository>(new HierarchicalLifetimeManager());
container.RegisterType<IAccountService, AccountService>(new HierarchicalLifetimeManager());
config.DependencyResolver = new UnityResolver(container);
appBuilder.UseWebApi(config);
}
}
試試這個:'return Ok(JsonConvert.SerializeObject(result,Formatting.Indented))''。 'JsonConvert'對象位於'Newtonsoft.Json'命名空間中,因此您可能需要添加引用和/或使用語句。 – user1429080