#c# #reactjs #.net #asp.net-web-api #abstract-class
Вопрос:
Я понятия не имею, как вытолкнуть значение json из react.js в абстрактный класс .NET. В принципе, вот мой абстрактный класс
using System.Runtime.Serialization;
[DataContract]
[KnownType(typeof(ConcreteOtherRegistry))]
[KnownType(typeof(ConcreteForeignerRetailRegistry))]
[KnownType(typeof(ConcreteUndetailedRegistry))]
[KnownType(typeof(ConcreteRetailRegistry))]
[KnownType(typeof(ConcretePublicRegistry))]
[KnownType(typeof(ConcreteCorporateRegistry))]
public abstract class ConcreteRegistryInfo
{
protected ConcreteRegistryInfo();
[DataMember(IsRequired = true)]
public long Oid { get; set; }
[DataMember(IsRequired = true)]
public short Status { get; set; }
[DataMember(IsRequired = true)]
public long LastUpdated { get; set; }
[DataMember(IsRequired = true)]
public long OperationRefNo { get; set; }
[DataMember(IsRequired = true)]
public string Address { get; set; }
public override string ToString();
}
а вот и мой веб-сервис
public class SaveApplicationParameters
{
public ConcreteRegistryInfo registryInfo{ get; set; }
}
[HttpPost]
public object[] SaveApplication([FromBody] SaveApplicationParameters saveApplicationParameters)
{
ConcreteApplication application = saveApplicationParameters.application;
try
{
Com.BS.WaterSupplyAndSeverage.Services.WaterSupplyAndSewerage wssService = new Com.BS.WaterSupplyAndSeverage.Services.WaterSupplyAndSewerage();
wssService.SaveApplication(application);
object[] result = new object[1];
result[0] = application.ApplicationNo;
return resu<
}
catch (Exception e)
{
FileLogger.Error(CLASS_NAME, "SaveApplication", e.Message, e.StackTrace, application, policy);
BSCommunicationException commException = PrepareCommunicationException(e);
throw new FaultException<BSCommunicationException>(commException, new FaultReason(commException.ExceptionMessage));
}
}
и вот мой пример кода, который нужно нажать
const body = { registryInfo: APPLICATION };
axios.post('https://localhost:44396/api/SaveApplication', body)
.then(async response => {
SuccessOperation({ RESPONS_DATA: await response.data });
})
.catch(() => {
FailedOperation({ RESPONSE_DATA: null })
});
вот мой JSONObject
let APPLICATION = {
IdentityNumber:IdentityNumber,
Name:Name,
SurName:SurName,
FatherName:FatherName,
MotherName:MotherName,
PlaceOfBirth:PlaceOfBirth,
Gender:Gender,
Email:Email,
DateOfBirth:DateOfBirth,
DayOfBirth:DayOfBirth,
MonthOfBirth:MonthOfBirth,
YearOfBirth:YearOfBirth,
GsmNumber:GsmNumber,
PhoneNumber:PhoneNumber,
Retired:Retired,
Address:Address,
Oid:Oid
}
В этом примере я отправляю конкретную информацию о регистрации. Но все классы(известный тип…) являются производными от ConcreteRegistryInfo, поэтому сначала я должен передать параметры в ConcreteRegistryInfo. У тебя есть какие-нибудь идеи, как я могу это сделать?
Комментарии:
1. Почему
ConcreteRegistryInfo
нужно быть абстрактным? Вы предполагаете, чтоregistryInfo
свойство параметра, переданного вашей службе, может быть экземпляром любого из классов, производных отConcreteRegistryInfo
него ? И почему ваш объект JSON содержит только свойстваAddress
иOid
из 5Required
свойств в этом классе? Я думаю, что у меня есть представление о том, что вы должны делать, но я хочу быть уверен, что сначала пойму намерение.2. Другой вопрос, используете ли вы полный . net framework или .net core? Я предполагал, что полностью . сетевая структура , поскольку вопрос помечен,
.net
а не.net-core
, но теперь мне интересно, правильно ли это предположение.3. Здравствуйте @sbridewell Я работаю над большим проектом. Этот проект был создан .net framework и ext.net2.0 до того, как я взялся за этот проект. Сервисная сторона действительно так велика. и многие абстрактные классы использовались на стороне обслуживания. поэтому я не могу изменить этот метод. Я меняю клиентскую сторону с Ext. Сеть, чтобы отреагировать. JS , я должен выяснить, как передать значение JSON в абстрактный класс. Ответ на второй вопрос: это образец JSON розничных участников. Что означает, что абстрактный класс выводит для меня розничных членов. Не переусердствуйте с этим json. Если вы знаете какое — либо решение, просто поделитесь им со мной, пожалуйста. Заранее спасибо
4. Итак, вы не меняете код на стороне сервера, вы просто хотите переписать клиент в React.js, это полезно знать. С какой частью этого вы боретесь? Вы получаете сообщение об ошибке при попытке позвонить в службу? Если да, то это ошибка в браузере или в коде на стороне сервера? Пожалуйста, поделитесь подробностями ошибки в вашем вопросе. Если вы не получаете ошибку, то что происходит при вызове сервера и чем это отличается от того, что вы ожидаете?
5. Привет @sbridewell Да, я просто хочу переписать свою клиентскую часть в React. JS, я не получаю никаких ошибок, я отправляю и объект, который включает в себя concreteRegisterInfo и другие параметры. И когда я проверяю свои параметры на стороне обслуживания, которая исходит от react. Js , я вижу, что мой ConcreteRegisterInfo равен нулю, но другие значения в порядке.