创建JSON对象或字符串..?

时间:2011-08-23 07:08:03

标签: asp.net json c#-4.0 json.net

我们可以使用C#中的字符串初始化JSON对象;

喜欢:"Person": [{"age":"42","name":"John"}]

object JsonData = "Person": [{"age":"42","name":"John"}];

???

这样我就可以直接将这个JSON对象提供给DatacontractJSONSerializer

我可以从中获取数据。!


        List<Person> people = new List<Person>{
                   new Person{age  = 1, name  = "Scott"},
                   new Person{age = 2, name  = "Bill"}
                   };




            string jsonString = ExtensionMethods.JSONHelper.ToJSON(people);


         }

    }
}
namespace ExtensionMethods
{
    public static class JSONHelper
    {
        public static string ToJSON(this object obj)
        {
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            return serializer.Serialize(obj);
        }

        public static string ToJSON(this object obj, int recursionDepth)
        {
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            serializer.RecursionLimit = recursionDepth;
            return serializer.Serialize(obj);
        }
    }
}

所以,

string jsonString = ExtensionMethods.JSONHelper.ToJSON(people);

提供一个字符串:[{},{}]

空数据结构,任何想法..?

1 个答案:

答案 0 :(得分:0)

使用扩展方法,您希望将方法修补为要调用该方法的类型。在这种情况下,IEnumerable是添加要在List上使用的方法的好地方:

public class Person {
  public int age { get; set; }
  public string name { get; set; }
}

public static class JSONHelper {
  public static string ToJSON(this IEnumerable obj) {
    return new JavaScriptSerializer().Serialize(obj);
  }
}

void Main() {
  List<Person> people = new List<Person> {
    new Person() { age = 1, name = "Scott" },
    new Person() { age = 2, name = "Bill" }
  };

  // [{"age":1,"name":"Scott"},{"age":2,"name":"Bill"}]
  string json = people.ToJSON();
}

重要的区别是你应该对它定义的类型的变量使用扩展方法。您不应该直接引用扩展方法。