2009-12-04 2 views
14

Я пишу метод расширения для разбора строки JSON для любого заданного типа. Я хотел использовать метод для типов вместо экземпляров, таких как многие примеры, которые мы уже знаем, но я несколько чувствую, что он не поддерживается Visual Studio. Может кто-нибудь просветить меня здесь? Ниже метод:Как создать методы расширения для типов

public static T ParseJson<T>(this T t, string str) where T: Type 
{ 
    if (string.IsNullOrEmpty(str)) return null; 
    var serializer = new JavaScriptSerializer(); 
    var obj = serializer.Deserialize<T>(str); 
    return obj; 
} 

Я хочу, чтобы вызвать метод в этой моде:

var instance = MyClass.ParseJson(text); 

Благодарности

+0

Обратите внимание, что 'ParseJson' возвращает' Type' не 'MyClass' с этим определением. – dtb

+0

Спасибо за улов. Я действительно попробовал var instance = typeof (MyClass) .ParseJson (текст); не работает – Codism

ответ

18

Короткий ответ это не может быть сделано; методы расширения должны работать над экземпляром чего-то.

2

Вы не можете создавать методы расширения, которые применяются к самому типу. Их можно вызвать только для экземпляров типа.

+1

и нулевые экземпляры этого типа, которые являются одним из значений погашения ext. методы :) string val = null; val.IsNullOrEmpty() Sweet ... –

+0

кажется аккуратным взломом! – Codism

3

Чтобы использовать метод расширения, вы должны сделать:

var instance = typeof(MyClass).ParseJson(text); 

Маркер «MyClass» не тип instamce intself, но с использованием TYPEOF поможет вам тип работать дальше. Но как это лучше, чем:

var instance = JsonUtility.ParseJson<MyClass>(text); 

Edit: На самом деле, код для метода расширения еще не будет делать то, что вы хотели. Он всегда будет возвращать объект «Тип», а не экземпляр этого типа.

+0

Ваше правильное изменение Крис. Это не сработало для меня. –