admin管理员组

文章数量:1312985

Something I'm confusing. The Javascript is going to produce the following JSON data.

{type:"book"     , author: "Lian", Publisher: "ABC"}
{type:"Newspaper", author: "Noke"}

This is only an example, actually I've got more than this.

Since I have mon fields between different JSON data, so I don't know is it possible to pass this to C# at one time. What I want to do is pass this to c# then do some processing, what is the best way to do? I'm using ASP.NET MVC2.

Thanks for your answer or hints.

Something I'm confusing. The Javascript is going to produce the following JSON data.

{type:"book"     , author: "Lian", Publisher: "ABC"}
{type:"Newspaper", author: "Noke"}

This is only an example, actually I've got more than this.

Since I have mon fields between different JSON data, so I don't know is it possible to pass this to C# at one time. What I want to do is pass this to c# then do some processing, what is the best way to do? I'm using ASP.NET MVC2.

Thanks for your answer or hints.

Share Improve this question asked Nov 22, 2010 at 15:39 user469652user469652 51.4k60 gold badges131 silver badges165 bronze badges 3
  • Your two objects look a bit similar, do you think you could create a mon class that would be used as a data transfer? Then you can pass all the data for all the types back and forth in an array, and use the type filed to determine how you should process the data server side. – Zachary Commented Nov 22, 2010 at 15:51
  • Do you mean create a JS class or C# class? There are more fields are different between them. The script is going to produce 5 differents kinds of objects, that only have 2 fields are same. – user469652 Commented Nov 22, 2010 at 15:54
  • The server side will take them and produce MS word document and return the file. – user469652 Commented Nov 22, 2010 at 15:55
Add a ment  | 

3 Answers 3

Reset to default 3

The bination of the 2 JSON statements above are, together, not valid JSON. That being said, you will not be able to use the JavaScriptSerializer class to deserialize that data into c# structure directly. Instead you will have to do some manual parsing first, to either break it down into valid JSON or just do full on manual parsing.

What I would actually remend is sending over valid JSON instead. You can acplish this by doing something like this:

{list: [
    {type:"book"     , author: "Lian", Publisher: "ABC"},
    {type:"Newspaper", author: "Noke"} ]

Hard to say exactly, since only you know the details of your use case. You can send this data over using a traditional 'ajax' request. This is very easy to do with out any of the many JS libraries out there, but I would remend just going with one anyway - they offer higher level constructs that are easier to use (and address cross-browser idiosyncrasies).

Since you are using ASP.NET MVC2, I would remend jQuery. Microsoft is now backing jQuery as their JS library of choice and even make it default for new web projects.

Once you pass the above JSON to C#, you can deserialize it by doing something like this:

JavaScriptSerializer serializer = new JavaScriptSerializer();
var result = serialzer.Deserialize<Dictionary<string, object>>(postedJSONData);

Your result will then have a structure that looks like this, in C#:

Dictionary<string, object> result =>
    { "list" => object },
                object => List<object>,
                          List<object> => Dictionary<string, object>
                                          { "type" => "book", "author" => "Lian" } // etc
[
    {type:"book"     , author: "Lian", Publisher: "ABC"},
    {type:"Newspaper", author: "Noke"}
]

Is still valid JSON (well actually keys need to be enclosed in " as well), so you can .push() into an array each time you create a JSON record.

var list = [];
// code doing other stuff
list.push({type:"book"     , author: "Lian", Publisher: "ABC"});
// more code doing other stuff
list.push({type:"Newspaper", author: "Noke"})

Once your JSON list is constructed, you can send that list to the backend in one go.

You can also use the JavaScriptSerializer to deserialize your own custom type. Esentially you make a very simple type with all the properties of your json objects then call

JavaScriptSerializer serializer = new JavaScriptSerializer();
MyType result = serialzer.Deserialize<MyType>(JsonData);

You can also deserialize an array

MyType[] result = serialzer.Deserialize<MyType[]>(JsonData);

本文标签: javascriptIs there a way to pass a list of JSON objects from JS to CStack Overflow