2012-02-02 5 views
0

У меня есть 2 метода, которые очень похожи.иногда возвращает объект и иногда возвращает сериализацию объекта

public string GetMyObjectInJson(parameters) 
{ 
MyObject TheObject = new MyObject(); 
...lots of work here 
Javascript Serializer = new Javascript Serializer(); 
return Serializer.serialize(TheObject); 
} 

public MyObject GetMyObject(parameters) 
{ 
MyObject TheObject = new MyObject(); 
...lots of work here 
return TheObject; 
} 

Как я должен переписать это так, что у меня есть только один метод, который может вернуть 2 различных типов: иногда строку, а иногда объект.

Спасибо.

ответ

2

Вы не должны. У вас должно быть есть два метода, так что из кода вызова ясно, что вы хотите и что вы получите.

Вы можете, однако, использовать один метод, чтобы сделать большую часть работы:

public string GetMyObjectInJson(parameters) 
{ 
    MyObject object = GetMyObject(); 
    Javascript Serializer = new JavascriptSerializer(); 
    return Serializer.serialize(TheObject); 
} 

public MyObject GetMyObject(parameters) 
{ 
    MyObject TheObject = new MyObject(); 
    ...lots of work here 
    return TheObject; 
} 

Однако, это наводит на мысль, что фактическиMyObject класс должен потенциально иметь метод SerializeToJson, поэтому звонящие бы написать:

string json = foo.GetMyObject().SerializeToJson(); 

Обратите внимание, что даже если вы не могли цепи один метод непосредственно к другому, вы могли бы иметь один частный метод, содержащий общая работа, которая будет вызвана как общественными методами. Вы не должны делать свой публичный API менее понятным, если вы можете просто реорганизовать свою реализацию.

+0

ОК, спасибо за наконечник; Я просто перенесирую сериализацию json в объект, и клиентский код вызовет MyObject.SelfSerialize() и объединит методы, как вы показали. Благодарю. – frenchie

+0

Я пишу инкапсулированный оператор сериализации следующим образом: string TheObjectInJson = TheJsonSerializer.Serialize (this); где TheJsonSerializer является экземпляром JavascriptSerializer. Все хорошо? – frenchie

+0

@frenchie: Кажется разумным. –