Создать JSON-объект или строку ..? - PullRequest
0 голосов
/ 23 августа 2011

Можем ли мы инициализировать объект JSON строкой в ​​C #;

, например: "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 голосов
/ 23 августа 2011

С помощью методов расширения вы хотите соединить ваш метод с типом, для которого вы намереваетесь вызывать этот метод.В этом случае IEnumerable является хорошим местом для добавления методов, которые вы хотите использовать в Списке:

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();
}

Важное отличие состоит в том, что вы должны использовать метод расширения для переменной определенного им типа.против.Вы не должны ссылаться на метод расширения напрямую.

...