开发者

reading JSON data remotely

UPDATE 1

i try to implement and but when i hover over my topic and i see the TopicId and TopicName are null and i see the data in myJSON string.

what else i have to do? what i am missing?

Topic topic = new Topic();
 MemoryStream stream1 = new MemoryStream(Encoding.Unicode.GetBytes(myJSON));
 //stream1.Position = 0;
 DataContractJsonSerializer serialize = new DataContractJsonSerializer(typeof(Topic));
 //topic = (Topic)serialize.ReadObject(stream1);
 Topic p2 = (Topic)serialize.ReadObject(stream1);
 stream1.Close();  //later i will use in `using statement`
 stream1.Dispose();

PS: i just have only Topic class is that enough or do i have to create all the classes that jcolebrand showed below?

i have created a class called Topic and in it i have two prop

[DataContract] 
    public class Topic 
    {       
        [DataMember]
        public string TopicId { get; set; }
        [DataMember]
        public string TopicName { get; set; } 
    } 

UPDATE 1 END

I am working on a requirement that returns JSON data and I need a way to parse the data and load that data into a dropdownlist and I'm looking for the element in JSON called TopicName

after the TopicName is extracted I will load that data into a DropDownList asp.net control (not using JQuery or JavaScript)

here is JSON data:

[{"NS":{"Count":1},
  "Source":{"Acronym":"ABC","Name":"Name"},
  "Item":[{"Id":"12312",
           "Url":"http://sitename",
           "ContentItem":[{"NS":{"Count":1},
                           "SourceUrl":"sitename",
                           "ContentType":"text/xml",
                           "PersistentUrl":"sitename",
                           "Title":"MY TITLE",
                           "SelectionSpec":{"ClassList":"","ElementList":"","XPath":null},
                           "Language":{"Value":"eng","Scheme":"ISO 639-2"},
                           "Source":{"Acronym":"ABC","Name":"Name","Id":null},
                           "Topics":[{"Scheme":"ABC",
                                      "Topic":[{"TopicId":"6544","TopicName":"TOPIC NAME1"},
                                               {"TopicId":"63453","TopicName":"TOPIC NAME2"},
                                               {"TopicId":"2343","TopicName":"TOPIC NAME3"},
                                               {"TopicId":"2342","TopicName":"TOPIC NAME4"}]
                                    }],
                           "ContentBody":null
                        }]
         }]
 },

[{"NS":{"Count":1},"Source":{"Acronym":"ABC1","Name":"Name1"},"Item":[{"Id":"123121","Url":"http://sitename1","ContentItem":[{"NS":{"Count":1},"SourceUrl":"sitename","ContentType":"text/xml","PersistentUrl":"sitename1","Title":"MY TITLE1",开发者_如何学Python"SelectionSpec":{"ClassList":"","ElementList":"","XPath":null},"Language":{"Value":"eng","Scheme":"ISO 639-2"},
"Source":{"Acronym":"ABC1","Name":"Name1","Id":null},"Topics":[{"Scheme":"ABC1","Topic":[{"TopicId":"65441","TopicName":"TOPIC NAME11"},{"TopicId":"634531","TopicName":"TOPIC NAME21"},{"TopicId":"23431","TopicName":"TOPIC NAME31"},{"TopicId":"23421","TopicName":"TOPIC NAME41"}]}],"ContentBody":null}]}]},


Assuming the re-indent as applied above is correct, then you have the following classes (apparently)

public class OuterWrapper {
  public NS NS { get; set; }
  public Source Source { get; set; }
  public ContentItemWrapper[] Item { get; set; } 
}
public class ContentItemWrapper {
  public int Id { get; set; }
  public string Url { get; set; }
  public ContentItem[] ContentItem { get; set; }
}
public class ContentItem {
  public NS NS { get; set; }
  public SourceUrl { get; set; }
  // I'm gonna skip a bunch of fields, you get the idea
  public Topics Topic { get; set; }
}
public class Topics {
  public string Scheme { get; set; }
  public Topic[] Topic { get; set; }
}
public class Topic {
  public string TopicId { get; set; }
  public string TopicName { get; set; }
}

And what you do is you use that set of type declarations (specifically the OuterWrapper) to DataContractJsonSerializer decode the JSON into a C# object that you can then query using strongly typed methods, etc. This is one of those times where C# doesn't have anywhere near the flexibility of Javascript, because everything has to be explicitly declared.


Try using built in serializer for JSON - http://msdn.microsoft.com/en-us/library/bb412179.aspx : new DataContractJsonSerializer(typeof(Person)).ReadObject(stream1);.

If it is not enough to read your objects consider using JSON.Net ( http://json.codeplex.com/) - JsonConvert.DeserializeObject<Labels>(json);

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜