2013-03-01 67 views
-1

我有以下代码:问题解析JSON对象响应于C#对象

[WebMethod] 
public bool AddUser(long warnId, double longitude, double latitude) 
{ 
    try 
    { 
     string jsonFeature = string.Empty; 
     jsonFeature += "[{'geometry': {'x': " + longitude + ",'y': " + latitude + 
         ",'spatialReference': {'wkid': 4326}},'attributes': {'UID': '"; 
     jsonFeature += warnId + "','Latitude': '" + latitude + "','Longitude': '" + longitude + "'}}]"; 

     string reqURL = System.Configuration.ConfigurationManager.AppSettings["WARNURL"] + "addFeatures"; 

     using (System.Net.WebClient client = new System.Net.WebClient()) 
     { 
      client.Headers["Content-type"] = "application/x-www-form-urlencoded"; 
      client.Encoding = System.Text.Encoding.UTF8; 
      var collection = new System.Collections.Specialized.NameValueCollection(); 
      collection.Add("f", "json"); 
      collection.Add("features", jsonFeature); 
      byte[] response = client.UploadValues(reqURL, "POST", collection); 
      MemoryStream stream = new MemoryStream(response); 
      StreamReader reader = new StreamReader(stream); 
      string aRespStr = reader.ReadToEnd(); 

      JavaScriptSerializer jss = new JavaScriptSerializer(); 
      AddResult addResult = jss.Deserialize<AddResult>(aRespStr); 


      return aRespStr.Contains("true") && aRespStr.Contains("success"); 
     } 
    } 
    catch(Exception e) 
    { 
     string message = e.Message; 
     return false; 
    } 
} 

当我运行它的字符串aRespStr是:

“{\” addResults \“:[{\ “对象ID \”:28,\ “globalId \”:\ “{740490C6-77EE-4AC0-9561-5EBAACE3A0A7} \”,\ “成功\”:真}]}”

我创建的一旦我反序列化它后,下面的类将保存该对象:

public class Error 
{ 
    public int code { get; set; } 
    public string description { get; set; } 
} 

public class AddResult 
{ 
    public int objectId { get; set; } 
    public object globalId { get; set; } 
    public bool success { get; set; } 
    public Error error { get; set; } 
} 

public class RootObject 
{ 
    public List<AddResult> addResults { get; set; } 
} 

但是当我运行代码时,addResult对象包含默认对象值而不是json对象值。

这个特定响应的API是在这里: http://help.arcgis.com/en/arcgisserver/10.0/apis/rest/fsadd.html

上得到这个工作的任何帮助感激

+0

该字符串与您的RootObject类匹配,但是您在代码示例中反序列化为AddResult。 – bmavity 2013-03-01 19:52:38

+0

感谢bmavity,当我将它改为反序列化到RootObject时它工作得很好 – 2013-03-01 20:26:20

回答

0

变化

client.Headers["Content-type"] = "application/x-www-form-urlencoded"; 

client.Headers["Content-type"] = "Application/json"; 
1

尝试这

RootObject addResults=jss.Deserialize<RootObject>(aRespStr); 

或与之相似,你可以试试这个

List<AddResult> addResults = jss.Deserialize<List<AddResult>>(aRespStr); 

因为你在你的JSON响应返回AddResult的名单。

并将内容类型更改为应用程序/ json

+0

请标记为答案。如果你有你的解决方案 – Sachin 2013-03-11 21:18:30